如何在R绘图中平滑曲线?已试lowess但不知如何集成代码
用lowess平滑累积曲线的R代码实现
从你的代码来看,你应该是在绘制vegan包的物种累积曲线(accumresult对象)。要添加lowess平滑线,需要先提取曲线的原始数据,拟合平滑模型后再叠加到图上,具体步骤如下:
步骤1:提取累积曲线的数值
先从你的累积结果对象中取出横轴(样本数量)和纵轴(物种数量)的数据:
# 提取第一条曲线的x、y值 x1 <- PA_Spe_accum$x y1 <- PA_Spe_accum$y # 提取第二条曲线的x、y值 x2 <- PA_Spe2_accum$x y2 <- PA_Spe2_accum$y
步骤2:用lowess拟合平滑曲线
使用lowess()函数拟合,核心参数f控制平滑程度(取值0-1,值越大曲线越平滑),这里以f=0.3为例:
# 拟合第一条曲线的平滑模型 fit1 <- lowess(x1, y1, f = 0.3) # 拟合第二条曲线的平滑模型 fit2 <- lowess(x2, y2, f = 0.3)
步骤3:叠加平滑线到原有绘图
先运行你原来的绘图代码,再用lines()把平滑线加上:
# 原有绘图代码(保留置信区间) plot(PA_Spe_accum, ci = 1.96, ci.type = "bar", las=1, col = "green3", lty = 1, lwd=2, ci.col = "green3", ci.lty = 1, xlim=c(0,60), ylim=c(0,70)) plot(PA_Spe2_accum, add = TRUE, ci = 1.96, ci.type = 'bar', lwd=2, col = 'royalblue4', lty = 1, ci.col = 'royalblue4', ci.lty = 1) # 添加lowess平滑线,用不同线型区分原始曲线和平滑线 lines(fit1, col = "darkgreen", lwd = 2, lty = 2) lines(fit2, col = "darkblue", lwd = 2, lty = 2)
额外调整建议
- 如果你觉得平滑效果不合适,可以修改
lowess()中的f参数:比如f=0.5会更平滑,f=0.1会更贴近原始数据。 - 若要显示原始数据点,可以在
plot()命令中添加pch=16(实心点)或其他点样式参数。
内容的提问来源于stack exchange,提问作者Anna-Sofie
相关产品推荐
相关产品推荐

