一些样本数据:
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案例中引发错误 .
EDIT:
这是部分黑客攻击 . 如果要扩展比例范围,则可以向数据集添加指定限制的列,然后使用 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
的情况下绘制点?”
2 回答
我不认为这在ggplot2中是可能的 . 从1月起discussion表明该问题正在考虑之中 .
要缩小左侧绘图上的比例,请移除位于该范围之外的点 . 例如 . 这会将右图上的y比例缩小到0到0.5之间的值:
另见我对此question的回答 .