在ggplot2中,如何使切面图具有最小高度并共享相同的刻度?

时间:2011-08-18 09:39:22

标签: r plot ggplot2

我正在制作一个像这样的刻面情节:

enter image description here

这是通过以下方式完成的:

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轴不共享相同的网格/刻度。我可以通过取消注释注释行来强制它们共享相同的网格,但后来我手动计算这个 - 有没有办法在任何密度图中使用最粗网格?

提前感谢您的任何答案。

1 个答案:

答案 0 :(得分:5)

<强>被修改

我不认为使用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使用不可见的点。

enter image description here