【问题标题】:Adding upper/lower cap to geom_smooth smoothed line将上限/下限添加到 geom_smooth 平滑线
【发布时间】:2023-02-25 04:05:06
【问题描述】:

我想使用 loess 方法对使用 geom_line (ggplot2) 生成的平滑线设置一个上限。我的数据不超过 1,但平滑线超过 1。

我在这方面找到的唯一帖子是从 2012 年开始的。但是,问题没有得到解决 (参见以下链接:https://groups.google.com/g/ggplot2/c/Mxsbb4p3V7Y)。

为了方便起见,我重复了最初由在这里提出问题的人发布的工作示例。我希望这不会造成太大的麻烦。正如同一个人所指出的,平滑线低于 0,尽管 min(y) = 0.007593811。

library(ggplot2)
y<-rep(0:1,each=20,times=5)+runif(10,0,0.05)
x<-seq(1:length(y))
ggplot()+geom_line(aes(x=x,y=y))+geom_smooth(aes(x=x,y=y),method='loess',span=0.20,se=F) 

是否可以为 geom_smooth 添加上限/下限,以便使用 loess 方法生成的平滑线的值位于特定范围内(例如,0 和 1)?谢谢你们。

【问题讨论】:

  • 您的资料在示例中超过 1。在您的实际数据中,它们不超过 1 吗?
  • 是的。这只是一个工作示例。在那种特定情况下,我们只需要有一个较低的上限。对困惑感到抱歉。

标签: r ggplot2 plot graph smoothing


【解决方案1】:

我认为这可以使用 delayed evaluation 来完成,以便平滑值在最后一分钟限制在所需范围内:

ggplot(data.frame(x,y), aes(x=x,y=y))+
  geom_line()+
  geom_smooth(aes(y=stage(y, after_stat = pmax(0,pmin(1, y)))),
              method='loess', span=0.20, se = FALSE) 

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 2021-12-30
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多