facet_grid 的多个直方图颜色计数
multiple histogram color count with facet_grid
所以我的问题是,我有一个数据框,我正在使用来自 ggplots 的 geom_hex 绘制。我的命令如下所示:
ggplot(data, aes(x=var1,y=var2))+geom_hex(bins=20)+facet_grid(fac1 ~ fac2,scales="free")
我遇到的问题是计数的着色方案在所有图表中共享。我想知道是否有任何快速方法可以为每行(或每列)图表生成计数配色方案。我尝试玩比例尺,但似乎这只适用于 y 轴和 x 轴上的比例尺,而不适用于直方图颜色和直方图颜色图例。谢谢!
以下是数据示例:
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")
因为一个因素的数据比较多,配色方案以第一行图为主,想有相同的配色方案,但根据每行的计数进行调整。
问得好;根据 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
产生下面的情节,我相信这就是你想要的。
这是我的评论扩展为答案。您最安全的选择是以下方法:
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)
所以我的问题是,我有一个数据框,我正在使用来自 ggplots 的 geom_hex 绘制。我的命令如下所示:
ggplot(data, aes(x=var1,y=var2))+geom_hex(bins=20)+facet_grid(fac1 ~ fac2,scales="free")
我遇到的问题是计数的着色方案在所有图表中共享。我想知道是否有任何快速方法可以为每行(或每列)图表生成计数配色方案。我尝试玩比例尺,但似乎这只适用于 y 轴和 x 轴上的比例尺,而不适用于直方图颜色和直方图颜色图例。谢谢! 以下是数据示例:
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")
因为一个因素的数据比较多,配色方案以第一行图为主,想有相同的配色方案,但根据每行的计数进行调整。
问得好;根据 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
产生下面的情节,我相信这就是你想要的。
这是我的评论扩展为答案。您最安全的选择是以下方法:
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)