我正在制作这样的多面图:
这是通过以下方式完成的:
df = data.frame(val=rnorm(2005), class=c(rep(c('a','b'), 1000), rep('c', 5)))
qplot(val, ..count.., data=df, geom='density', fill=I('black')) +
opts(strip.text.y = theme_text()) +
# scale_y_continuous(breaks=seq(0, 999, by=50)) +
facet_grid(class ~ ., scale = "free", space = "free")
我确实希望面的大小不同(仅占用必要的垂直空间),但保持相同的比例。
现在,这个图有一些问题:
我想在每个面上施加一个最小高度,以便您至少可以看到正确的标签文本并将显示识别为空密度图 - 目前,如果我不知道如何生成这个情节,我绝对猜不到底部的那个神器是什么。
虽然面共享相同的比例,但 y 轴不共享相同的网格/刻度。我可以通过取消注释行来强制它们共享相同的网格,但是然后我手动计算它 - 有没有某种方法可以在任何密度图中使用最粗糙的网格?
预先感谢您的回答。
最佳答案
已编辑
我认为使用 ggplot 的优雅参数不可能做到这一点,但很高兴被证明是错误的。
但是,这里有一个可以达到预期效果的解决方法。这个想法是在绘图中添加一个不可见层,该层具有 y 轴上足够高的单个点,以强制每个面板具有最小尺寸。在本例中,我手动将此值选择为 50,但您应该能够创建一个基于最大计数百分比或类似的算法:
df = data.frame(val=rnorm(2005), class=c(rep(c('a','b'), 1000), rep('c', 5)))
dg <- data.frame(class=c("a","b","c"), value=rep(50,3))
qplot(val, ..count.., data=df, geom='density', fill=I('black')) +
opts(strip.text.y = theme_text()) +
facet_grid(class ~ ., scales="free", space="free") +
geom_blank(data=dg, aes(x=0, y=value))
编辑 2 感谢 @Thierry 提供的提示,使用 geom_blank
而不是带有不可见点的 geom_point
。
关于r - 在 ggplot2 中,如何使多面图具有最小高度并共享相同的刻度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105350/