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

Yan*_*ang 2 plot r 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, 999, by=50)) +
  facet_grid(class ~ ., scale = "free", space = "free")
Run Code Online (Sandbox Code Playgroud)

我故意确实希望小平面的大小不同(只占用尽可能多的垂直空间)但保持相同的比例.

现在,这个情节存在一些问题:

  • 我想在每个方面施加一个最小高度,这样你至少可以看到正确的标签文字,并将显示识别为空密度图 - 目前,如果我不知道我是如何生成这个情节的,我绝对不会已经猜到了底部的神器是什么.

  • 虽然小平面具有相同的比例,但y轴不共享相同的网格/标记.我可以通过取消注释注释行来强制它们共享相同的网格,但后来我手动计算这个 - 有没有办法在任何密度图中使用最粗网格?

提前感谢您的任何答案.

And*_*rie 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)) 
Run Code Online (Sandbox Code Playgroud)

编辑2感谢@Thierry提示使用geom_blank而不是geom_point使用隐形点.

在此输入图像描述