【问题标题】:How do you set different scale limits for different facets?您如何为不同的方面设置不同的比例限制?
【发布时间】:2010-11-25 10:53:59
【问题描述】:

一些样本数据:

dfr <- data.frame(
  x = rep.int(1:10, 2),
  y = runif(20),
  g = factor(rep(letters[1:2], each = 10))
)

具有两个方面的简单散点图:

p <- ggplot(dfr, aes(x, y)) + 
  geom_point() +
  facet_wrap(~ g, scales = "free_y")

我可以为所有面板设置轴限制

p + scale_y_continuous(limits = c(0.2, 0.8))

(或者像ylim这样的包装器)

但是如何为不同的面设置不同的轴限制?

这样做的格子方法是将一个列表传递给这个参数,例如,

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5)))

不幸的是,这只是在 ggplot2 案例中引发错误。

编辑:

这是一个部分破解。如果您想扩展比例范围,则可以将列添加到数据集中指定限制,然后使用geom_blank 绘制它们。

修改后的数据集:

dfr <- data.frame(
  x = rep.int(1:10, 2),
  y = runif(20),
  g = factor(rep(letters[1:2], each = 10)),
  ymin = rep(c(-0.6, 0.3), each = 10),
  ymax = rep(c(1.8, 0.5), each = 10)
)

更新剧情:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax))

现在比例不同了,左手是正确的。不幸的是,右手刻度没有收缩,因为它需要为分数腾出空间。

如果有帮助,我们现在可以将问题改写为“是否可以在不重新计算比例且不显式调用 scale_y_continuous 的情况下绘制点?”

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我认为这在 ggplot2 中是不可能的。来自 1 月份的 discussion 表明该问题正在考虑中。

    【讨论】:

    • 感谢您的链接。虽然不是我希望的答案。
    • @Ritchie:与 Hadley 核实一下,他可能在 ggplot2 的开发版本中有一些工作
    【解决方案2】:

    要缩小左侧图上的比例,请删除范围之外的点。例如。这会将右图中的 y 比例减小到 0 到 0.5 之间的值:

    p <- ggplot(dfr, aes(x, y)) +   
         geom_point(subset=.(g == "a" | (y > 0 & y <.5))) +
         geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) +
         facet_wrap(~ g, scales = "free_y")
    

    另请参阅我对此question 的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2021-06-09
      相关资源
      最近更新 更多