【发布时间】: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 的情况下绘制点?”
【问题讨论】: