将geom_boxplot与facet_grid和free_y一起使用

时间:2014-07-31 15:01:03

标签: r plot ggplot2 boxplot axis-labels

此问题已被问及a few times,但我已经全部阅读,无法找到答案。

df <- data.frame(f1=factor(rbinom(100, 1, 0.45), label=c("m","w")), 
                 f2=factor(rbinom(100, 1, 0.45), label=c("young","old")),
                 boxthis=rnorm(100))
ggplot(aes(y=boxthis, x=f2), data=df) 
  + geom_boxplot() 
  + facet_grid(~f1, scales="free")

这将生成下面的图表,但 y轴在构面列上共享。在我的实际数据中,这是一个问题,因为f1中的每个因素都需要一个截然不同的轴范围。让free在这里工作有一些技巧吗?

plot

我发现free在制作小平面垂直时按预期工作,如下图所示,但与使小平面水平相比,这显然很可怕

ggplot(aes(y=boxthis, x=f2), data=df) 
  + geom_boxplot() 
  + facet_grid(f1~., scales="free")

plot2

1 个答案:

答案 0 :(得分:3)

我会继续发布@ DavidArenburg的回答来解决这个问题。您应该使用facet_wrap而不是facet_grid

df <- data.frame(f1=factor(rbinom(100, 1, 0.35), label=c("m","w")), 
                 f2=factor(rbinom(100, 1, 0.65), label=c("young","old")),
                 boxthis=rnorm(100))
ggplot(aes(y=boxthis, x=f2), data=df) +
  geom_boxplot() +
  facet_wrap(~f1, scales="free")

基本上facet_grid尝试很好地对齐所有内容,以便在矩形布局中跨行和列的变量级别相同,并且可以轻松地比较各个图。 facet_wrap不那么挑剔,只会将图形包装成任意数量的行和列。这就是为什么后者允许你指定nrowsncols而前者不允许(它使用条件因子中的级别数)

enter image description here