在ggplot2下手动着色平滑的线条

时间:2014-11-05 12:59:33

标签: r ggplot2

我正在绘制一组带阴影的数据,以跟随下限和上限值。我使用stat_smoothEst值应用了平滑,但我无法获得由UB和LB值指定的着色区域以跟随平滑线。这是数据:

 Quantiles   Est    LB    UB
 0.10 -4.39 -4.80 -4.00
 0.25 -3.46 -3.72 -3.22
 0.50 -3.11 -3.29 -2.91
 0.75 -2.89 -3.15 -2.60
 0.90 -1.69 -2.21 -1.09

这是我的ggplot代码:

ggplot(data,aes(y=Est,x=Quantiles)) + stat_smooth() + 
geom_ribbon(aes(ymin=LB,ymax=UB),alpha=0.2)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我的理解是,您希望色带边界遵循平滑曲线,而不是简单地连接LB和UB点。在您的情况下,stat_smooth使用黄土方法计算平滑曲线。您没有足够的数据点来使用默认顺序2计算真实平滑的黄土曲线,因此黄土函数返回通过给定数据数据点的曲线,使用二次平滑曲线连接这些曲线,并在警告信息。忽略这些警告,获得平滑色带的一种方法是计算数据平滑点和色带边界,然后绘制结果,如下所示:

smooth <- data.frame(Quantiles= seq( min(data$Quantiles), max(data$Quantiles), length.out=100))
smooth$Est <- predict(loess(Est ~ Quantiles, data), newdata=smooth$Quantiles)
smooth$LB  <-  predict(loess(LB ~ Quantiles, data), newdata=smooth$Quantiles)
smooth$UB  <-  predict(loess(UB ~ Quantiles, data), newdata=smooth$Quantiles)
ggplot(data=smooth,aes(y=Est,x=Quantiles)) +  geom_line() +
    geom_ribbon(aes(ymin=LB,ymax=UB),alpha=0.2)