You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R基础绘图:如何为滚动均值线添加±0.5范围的阴影区域?

折线图阴影区域绘制异常问题

我绘制了一幅简单折线图:灰色折线代表原始高频数据,黑色实线为该数据的滚动均值线。需要在黑色均值线的两侧各扩展0.5的范围添加阴影区域,两条黑色虚线标记了阴影的预期边界。但用polygon()函数实现时,阴影区域出现异常(上端与起点错误连接),无法定位问题原因。

示例数据

xval,yval,runm
6.92232415850722,10223.1125440397,NA
6.97567055289054,10223.7940848759,NA
...(剩余数据省略)

绘图代码

plot(dat$xval, dat$yval, pch=".", col="grey", ylab = "", xlab = "", type="l", xlim = c(5,8))
lines(rollmean(dat$xval, 30, fill=NA), dat$yval, col="black", lwd=2)
xmin <- c(rollmean(dat$xval, 30, fill=NA) - 0.5)
xmax <- c(rollmean(dat$xval, 30, fill=NA) + 0.5)
lines(xmin, dat$yval, col="black", lwd=2, lty = 2)
lines(xmax, dat$yval, col="black", lwd=2, lty = 2)
polygon(c(xmin, rev(xmax)), c(dat$yval, rev(dat$yval)), col = rgb(0, 0, 1, alpha = 0.3), border = NA)

异常表现

阴影区域上端与起点错误连接,不符合预期的边界范围。


问题原因及解决办法
  • 核心问题:polygon()函数要求输入的坐标点按闭合多边形的顺序排列,但当前xmin和xmax中存在NA值(来自rollmean()的fill=NA),且坐标点顺序未匹配正确的y轴对应关系,导致绘图时错误连接首尾。
  • 修正步骤:
    1. 过滤NA值:先筛掉包含NA的行,确保xmin、xmax和对应的yval无缺失值。
    2. 匹配坐标顺序:polygon()需要的是从左下角到右下角,再反向回到左上角的闭合路径,要保证x和y的向量长度一致且无NA。

修正后的代码

# 计算滚动均值并标记有效索引
roll_x <- rollmean(dat$xval, 30, fill=NA)
valid_idx <- !is.na(roll_x)

# 提取无NA的有效数据
x_valid <- dat$xval[valid_idx]
y_valid <- dat$yval[valid_idx]
xmin_valid <- roll_x[valid_idx] - 0.5
xmax_valid <- roll_x[valid_idx] + 0.5

# 重新绘图
plot(dat$xval, dat$yval, pch=".", col="grey", ylab = "", xlab = "", type="l", xlim = c(5,8))
lines(roll_x, dat$yval, col="black", lwd=2)
lines(xmin_valid, y_valid, col="black", lwd=2, lty = 2)
lines(xmax_valid, y_valid, col="black", lwd=2, lty = 2)
# 绘制正确的阴影区域
polygon(c(xmin_valid, rev(xmax_valid)), c(y_valid, rev(y_valid)), col = rgb(0,0,1,alpha=0.3), border=NA)
  • 额外说明:过滤NA后,阴影只会在滚动均值有效的区域绘制,既避免了错误连接,也符合均值线的实际覆盖范围。

内容的提问来源于stack exchange,提问作者Kj Ell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:57:02