此问题已被问及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
在这里工作有一些技巧吗?
我发现free
在制作小平面垂直时按预期工作,如下图所示,但与使小平面水平相比,这显然很可怕
ggplot(aes(y=boxthis, x=f2), data=df)
+ geom_boxplot()
+ facet_grid(f1~., scales="free")
答案 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
不那么挑剔,只会将图形包装成任意数量的行和列。这就是为什么后者允许你指定nrows
和ncols
而前者不允许(它使用条件因子中的级别数)