R 仅在ggplot2中填充(展开)连续比例的顶部

R 仅在ggplot2中填充(展开)连续比例的顶部,r,ggplot2,R,Ggplot2,我有一些数据共享一个共同的x轴,但有两个不同的y变量: set.seed(42) data = data.frame( x = rep(2000:2004, 2), y = c(rnorm(5, 20, 5), rnorm(5, 150, 15)), var = rep(c("A", "B"), each = 5) ) 我正在使用刻面线图来显示数据: p = ggplot(data, aes(x, y)) + geom_line() + facet_gr

我有一些数据共享一个共同的x轴,但有两个不同的y变量:

set.seed(42)
data = data.frame(
    x = rep(2000:2004, 2),
    y = c(rnorm(5, 20, 5), rnorm(5, 150, 15)),
    var = rep(c("A", "B"), each = 5)
)
我正在使用刻面线图来显示数据:

p = ggplot(data, aes(x, y)) +
    geom_line() +
    facet_grid(var ~ ., scales = "free_y")

我希望y轴包括0。这很简单:

p + expand_limits(y = 0)
但是我的数据看起来太拥挤了,太接近我的切面顶部了。所以我想填充轴的范围。通常,
scale\u y\u continuous(expand=…)
用于填充轴,但填充对称地应用于顶部和底部,使y轴远低于0


我无法明确设置限制,因为面具有自由y比例在乘法填充y比例顶部的同时,将y比例向下扩展到0(不低于!)的最佳方法是什么?

您可以为每个面创建一个额外的数据集,并使用
geom_blank()
以不可见的方式绘制它。该点被选择为大于给定面中最大值的固定因子。在这里,我选择该系数为1.5,以使效果清晰可见:

max_data <- aggregate(y ~ var, data = data, FUN = function(y) max(y) * 1.5)
max_data <- transform(max_data, x = 2000)

p + geom_blank(data = max_data)

max_data这很有效(+1!),但我乐观地希望能在情节中添加一些东西-如果我能将这种行为作为主题的一部分,我会很高兴。看看@Rosen Matev在@SandyMuspratt的不对称填充函数谢谢!这正是我要找的。同样,罗森·马特夫的解决方案也与ggplot 2.0相冲突。我提供了一个非常笨拙的解决方案。
max_data <- aggregate(y ~ var, data = data, FUN = function(y) max(y) * 1.5)
max_data <- transform(max_data, x = 2000)

p + geom_blank(data = max_data)