将 geom_boxplot 与 facet_grid 和 free_y 一起使用

Ham*_*amy 5 plot r ggplot2 boxplot axis-labels

这个问题已经被问一个 ,但我读过所有这些,并不能找到答案。

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")
Run Code Online (Sandbox Code Playgroud)

这将生成下面的图,但y 轴在 facet column 中共享。在我的真实数据中,这是一个问题,因为每个因素都f1需要一个截然不同的轴范围。free在这里上班有什么技巧吗?

阴谋

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

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

情节2

MrF*_*ick 6

我会继续在这里发布@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")
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明