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

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

预先感谢您的回答。

最佳答案

已编辑

我认为使用 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

关于r - 在 ggplot2 中,如何使多面图具有最小高度并共享相同的刻度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105350/

相关文章:

r - 对向量/列表的元素进行分组的函数

python - 有什么办法可以让这段代码更短吗?茎次要情节

r - geom_bar 从最小到最大数据值

r - 每个点而不是单个数据点的散点图汇总统计数据(例如总和或平均值)

r - 将图例标签添加到 ggplot 的条形图

r - 在 R 中设置等同于 .subset2?

r - ggplot2 facet_wrap : only use x-axis labels existing in each group

r - Dplyr:按条件过滤成对分组数据集,每对只保留一行

python - 仅绘制频率大于 2 的字符串

r - 缺少坐标轴在 ggplot2 中接触的像素