R 在ggplot2中,如何使分面打印具有最小高度并共享相同的刻度?

R 在ggplot2中,如何使分面打印具有最小高度并共享相同的刻度?,r,plot,ggplot2,R,Plot,Ggplot2,我正在制作一个平面图,如下所示: 这是通过以下方式实现的: 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,

我正在制作一个平面图,如下所示:

这是通过以下方式实现的:

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)) 
df=data.frame(val=rnorm(2005),class=c(rep(c('a','b'),1000),rep('c',5)))
dg我不想给每个方面相同的空间-我希望它们只占必要的高度,除了最小高度。啊,我误解了你原来的问题,对不起。我已经编辑了我的答案,以提供可能的解决方法。阿黛丽,你应该在这里使用geom_blank()而不是geom_point()@Thierry,这是一个很好的建议。最后,我找到了“geom_blank”的真实用法。编辑问题以反映这一点。更好的方法是使用
expand\u limits
,它在内部使用
geom\u blank