如何为不同方面设置不同的比例限制?

Ric*_*ton 26 r ggplot2

一些样本数据:

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

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

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

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

p + scale_y_continuous(limits = c(0.2, 0.8))
Run Code Online (Sandbox Code Playgroud)

(或者像这样的包装ylim)

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

执行此操作的格式方法是将列表传递给此参数,例如,

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5)))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只会在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)
)
Run Code Online (Sandbox Code Playgroud)

更新的情节:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax))
Run Code Online (Sandbox Code Playgroud)

现在尺度不同,左手尺是正确的.不幸的是,右手尺度不会收缩,因为它需要为积分腾出空间.

如果它有所帮助,我们现在可以将问题重新描述为"是否有可能在没有重新计算尺度且没有明确调用的情况下绘制点scale_y_continuous?"

Rei*_*son 6

我不认为这在ggplot2中是可能的.这种讨论从一月提出的问题正在考虑中.


flo*_*oat 0

要缩小左图的比例,请删除范围之外的点。例如,这会将右图上的 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")
Run Code Online (Sandbox Code Playgroud)

另请参阅我对这个问题的回答。