您可以使用lapply
創建一個列表與一個情節爲cyl
每個值:
# Create a separate plot for each value of cyl, and store each plot in a list
p.list = lapply(sort(unique(mtcars$cyl)), function(i) {
ggplot(mtcars[mtcars$cyl==i,], aes(mpg, disp, colour=factor(cyl))) +
geom_point(show.legend=FALSE) +
facet_wrap(~cyl) +
scale_colour_manual(values=hcl(seq(15,365,length.out=4)[match(i, sort(unique(mtcars$cyl)))], 100, 65))
})
的複雜scale_colour_manual
參數是一種方法,一種顏色的點標記,他們將如果是彩色的相同方式,所有的在ggplot
的單個調用中包含cyl
的值。
UPDATE:爲了解決您的意見,這個怎麼樣:
# Fake data
set.seed(15)
dat = data.frame(group=rep(c("A","B","C"), each=100),
value=c(mapply(rnorm, 100, c(5,10,20), c(1,3,5))))
p.list = lapply(sort(unique(dat$group)), function(i) {
ggplot(dat[dat$group==i,], aes(value, fill=group)) +
geom_histogram(show.legend=FALSE, colour="grey20", binwidth=1) +
facet_wrap(~group) +
scale_fill_manual(values=hcl(seq(15,365,length.out=4)[match(i, sort(unique(dat$group)))], 100, 65)) +
scale_x_continuous(limits=range(dat$value)) +
theme_gray(base_size=15)
})
結果如下。請注意,上面的代碼在所有三個圖表上給出了相同的x尺度,但y尺度不一樣。爲了獲得相同的y比例,您可以將其硬編碼爲scale_y_continuous(limits = c(0,35))
,或者您可以通過編程獲得您設置的任何binwidth的最大計數,然後將其輸入到scale_y_continuous
。
# Arrange all three plots together
library(gridExtra)
do.call(grid.arrange, c(p.list, nrow=3))
是的,我找的那個。它完成了這項工作,但是語法很複雜,我們只是在做一個點圖。我發現這個https://github.com/guiastrennec/ggplus雖然它不適用於R版本3.2 –
我設法繪製了我的具體情節,但它與x軸大量混亂(這是一個直方圖,而不是每個方面在計數中有相同的x值)對此有何建議? –
我一直在使用和適應這個代碼:)。只是爲了給這個好的答案添加一些東西。如果x是某些級別的NA的因子,則使用scale_x_discrete(...,drop = FALSE)可解決每個圖中具有相同x級別的問題 –