填充线条曲线

时间:2015-03-12 17:04:13

标签: r data-visualization

对于下面的样本数据集,我想将y绘制为一条平滑线,并使用R在线下填充。

我能够获得平滑线但不能填充颜色曲线。有人可以帮我吗?

date, y
2015-03-11, 71.12
2015-03-10, 34.0
2015-03-09, 11.1
2015-03-08, 9.62
2015-03-07, 25.97
2015-03-06, 49.7
2015-03-05, 38.05
2015-03-04, 38.05
2015-03-03, 29.75
2015-03-02, 35.85
2015-03-01, 30.65

我用来绘制平滑线的代码如下。我无法用颜色填充线下的部分

y <- df$y
x <- 1:length(y)

plot(x, y, type='n')
smooth = smooth.spline(x, y, spar=0.5)
lines(smooth)

enter image description here

修改 使用多边形函数不会给出预期的结果。阴影区域应低于不在

之上的线
with(smooth, polygon(x, y, col="gray"))

enter image description here

1 个答案:

答案 0 :(得分:11)

通过在游行时按顺序列出其边界顶点来描述多边形。

此多边形的边界由右下角和左下角的曲线加上另外两个顶点组成。为了帮助你看到它们,我已经过度绘制顶点,根据序列中的位置改变颜色。

Figure

这是执行此操作的R代码。它使用predictspline对象获取曲线坐标,然后使用连接运算符c连接两个额外点的x坐标和y坐标。要使填充转到轴,手动设置绘图范围。

y <- c(71, 34, 11, 9.6, 26, 50, 38, 38, 30, 36, 31)
n <- length(y)
x <- 1:n
s = smooth.spline(x, y, spar=0.5)
xy <- predict(s, seq(min(x), max(x), by=1)) # Some vertices on the curve
m <- length(xy$x)                         
x.poly <- c(xy$x, xy$x[m], xy$x[1])         # Adjoin two x-coordinates
y.poly <- c(xy$y, 0, 0)                     # .. and the corresponding y-coordinates
plot(range(x), c(0, max(y)), type='n', xlab="X", ylab="Y")
polygon(x.poly, y.poly, col=gray(0.95), border=NA)          # Show the polygon fill only
lines(s)
points(x.poly, y.poly, pch=16, col=rainbow(length(x.poly))) # (Optional)