使用facet_grid进行多个直方图颜色计数

时间:2015-02-04 15:04:02

标签: r ggplot2

所以我的问题是,我有一个数据框,我正在用ggplots的geom_hex绘图。我的命令如下:

ggplot(data, aes(x=var1,y=var2))+geom_hex(bins=20)+facet_grid(fac1 ~ fac2,scales="free")

我遇到的问题是所有图表都共享计数的着色方案。我想知道是否有任何快速的方法来生成每行(或列)图形的计数颜色方案。我尝试使用刻度,但似乎这只适用于y和x轴上的刻度,而不是直方图颜色和直方图颜色图例。日Thnx! 以下是数据示例:

fac1<-c(rep(1, 6000), rep(2, 1000))
fac2<-c(rep("a", 3000), rep("b", 3000),rep("a", 500), rep("b", 500))
var1<-rnorm(7000)
var2<-rnorm(7000)
data<-data.frame(fac1,fac2,var1,var2)
ggplot(data, aes(x=var1,y=var2))+geom_hex(bins=20)+facet_grid(fac1 ~ fac2,scales="free")

因为来自一个因素的数据太多了,所以颜色方案由第一行图表控制,并且希望具有相同的着色方案,但是通过每行的计数进行调整。

2 个答案:

答案 0 :(得分:0)

好问题;基于2010年的这个答案Different legends and fill colours for facetted ggplot? Hadley Wickham表示你不能每个情节有多个传奇尺度。

在您的情况下解决此问题的一种简单方法是使用gridExtra包。

require('gridExtra')
p1<-ggplot(data[data$fac1==1 & data$fac2=="a",],  aes(x=var1,y=var2))+geom_hex(bins=20)
p2<-ggplot(data[data$fac1==2 & data$fac2=="a",],  aes(x=var1,y=var2))+geom_hex(bins=20)
p3<-ggplot(data[data$fac1==1 & data$fac2=="b",],  aes(x=var1,y=var2))+geom_hex(bins=20)
p4<-ggplot(data[data$fac1==2 & data$fac2=="b",],  aes(x=var1,y=var2))+geom_hex(bins=20)
grobframe <- arrangeGrob(p1,p2,p3,p4 ,ncol=2, nrow=2,
                         main = textGrob("Plots", gp = gpar(fontsize=12, fontface="bold.italic", fontsize=12)))

打印grobframe会产生以下情节,我相信这就是你想要的。

enter image description here

答案 1 :(得分:0)

我的评论扩展为答案。你最安全的赌注是以下方法:

library(gridExtra)
p1 <- ggplot(data[data$fac1==1, ], aes(x=var1,y=var2)) + 
        geom_hex(bins=20) + facet_grid(fac1 ~ fac2,scales="free") + xlab("")
p2 <- ggplot(data[data$fac1==2, ], aes(x=var1,y=var2)) + 
        geom_hex(bins=20) + facet_grid(fac1 ~ fac2,scales="free") + 
        scale_fill_gradient(low = "red", high = "white")
grid.arrange(p1, p2)

enter image description here