【问题标题】:Set limits on loess line confidence interval shading in ggplot在ggplot中设置黄土线置信区间阴影的限制
【发布时间】:2018-11-01 11:20:30
【问题描述】:

我在 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))

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

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

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

【问题讨论】:

  • 您也可以尝试一种更基于统计的方法来处理泊松误差。
  • 如果你只剪掉灰色区域的一部分,你希望它有什么解释?这将不再是一个适当的置信区间。如果没有适当的约束统计模型,那么您只是在该点绘制一个随机形状。可能最好不要这样做。

标签: r ggplot2 loess


【解决方案1】:

我们可以计算覆盖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 年 5 月 22 日创建。

【讨论】:

  • 您可以将此选项用于 y 轴(如果需要,也可以用于 x 轴):scale_y_continuous(limits = c(min_y,max_y), oob=squish)
【解决方案2】:
 ggplot(df, aes(x=x, y=y)) +
   geom_point() +
   geom_smooth() +
   coord_cartesian(ylim = c(0,200))

【讨论】:

  • 这能解决 OP 的问题吗?灰色 CI 低于零
  • 是的,这确实解决了 OP 的问题,并且是一个非常简单的解决方案。这应该是最佳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 2013-11-07
相关资源
最近更新 更多