我在ggplot中正确显示黄土线有问题。我有几个变量,没有一个可以低于零,例如身高,体重和丰度。我试图用黄土线在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))


r - 在ggplot中设置黄土线置信区间底纹的限制-LMLPHP

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

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


r - 在ggplot中设置黄土线置信区间底纹的限制-LMLPHP

但这会使黄土线周围的阴影区域的一部分消失。有没有办法使y轴的绘图限制为零,以便将阴影区域的一部分切除,或者首先在黄土线上设置限制,以免产生阴影哪个区域低于零?

最佳答案

我们可以计算覆盖yminstat_smooth 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创建。

08-24 13:08