我想给geom_line(ggplot2)使用loose方法生成的平滑线加上一个上限。我的数据没有超过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添加一个上限/下限,以便使用黄土方法生成的平滑线的值位于特定范围内(例如,0和1)?谢谢大家。
- 编辑**
谢谢你们两个伟大的解决方案!
2条答案
按热度按时间cygmwpex1#
您的示例包含大于1的值,因此让我们创建一个不大于1的等效数据集:
虽然我们可以简单地将黄土固定在[0,1]范围内,但一个稍微复杂的方法是执行logit变换,对 that 进行回归,然后反转变换,这会得到一个更平滑的结果:
m4pnthwp2#
我认为这可以通过使用delayed evaluation来实现,以便在最后一分钟将平滑值限制在所需的范围内: