在ggplot中设置黄土线置信区间阴影的限制

Set limits on loess line confidence interval shading in ggplot

我在 ggplot 中正确显示黄土线时遇到问题。我有几个变量,其中 none 可以低于零,例如身高、体重和丰度。我试图用黄土线在 ggplot 中绘制这些数据。使用一些虚构的数据:

library(ggplot2)

df <- as.data.frame(rep(1:7, each = 5))

df[,2] <- c(0,1,5,0,6,0,7,2,9,1,1,18,4,2,34,8,18,24,56,12,12,18,24,63,48,
       40,70,53,75,98,145,176,59,98,165)

names(df) <- c("x", "y")

ggplot(df, aes(x=x, y=y)) +
  geom_point() +
  geom_smooth() +
  scale_y_continuous(limits = c(-20,200))

除了显示平滑线周围置信区间的阴影区域低于零并且审阅者指出这是不可能的并要求我更改它之外,这会很好。我认为这可以通过将 y 轴的下限设置为零来轻松完成:

ggplot(df, aes(x=x, y=y)) +
  geom_point() +
  geom_smooth() +
  scale_y_continuous(limits = c(0,200))

但这使得黄土线周围的部分阴影区域消失了。有没有一种方法可以使绘图在 y 轴限制为零的情况下工作,以便切断阴影区域的一部分,或者首先在黄土线上设置一个限制,这样它就不会创建阴影低于零的区域?

 ggplot(df, aes(x=x, y=y)) +
   geom_point() +
   geom_smooth() +
   coord_cartesian(ylim = c(0,200))

我们可以计算覆盖 stat_smoothymin aes(注意与 geom_smooth 的区别):

ggplot(df, aes(x=x, y=y)) +
  geom_point() +
  stat_smooth(geom='ribbon', aes(ymin = ifelse(..ymin.. < 0, 0, ..ymin..)), 
              alpha = .3) +
  geom_smooth(se = FALSE) +
  scale_y_continuous(limits = c(-20,200))
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

reprex package (v0.2.0) 创建于 2018-05-22。