R语言绘制年度数据线性趋势线失败的解决方法
你之前几种方法失败都是语法、变量引用的低级错误,对应问题点:
- 方法1里
type="line"是拼写错误,R基础绘图里连线类型的参数值是"l",传"line"不会触发连线渲染,而且这个方法本来就是画逐点连线,不是拟合趋势线 - 方法2完全写反了自变量因变量,还引用了根本不存在的
means对象,相当于拿年份当结果去拟合不存在的变量,坐标轴、线方向全错 - 方法3、4没出趋势线,基本是因为你没给模型/绘图函数指定数据来源,要么环境里没有和列名同名的向量,要么ggplot里formula写法错误导致模型拟合失败
下面给两种可直接运行的正确实现,用你给出的测试数据就能复现你要的红色直线趋势线效果:
先构造测试数据
df <- data.frame( b = c(2015, 2016, 2017, 2018, 2019, 2020), values = c(0.1239, 0.1147, 0.1151, 0.1195, 0.1143, 0.0856) )
方法一:基础R绘图实现
# 绘制散点,明确指定数据来源为df plot(values ~ b, data = df, xlab = "Year", ylab = "Values (%)", main = "Profit on equity", pch = 19, ylim = c(0.08, 0.13)) # 拟合线性趋势模型 fit <- lm(values ~ b, data = df) # 添加红色趋势线,可调整线宽 abline(fit, col = "red", lwd = 2) grid() box()
方法二:ggplot2 实现
library(ggplot2) ggplot(df, aes(x = b, y = values)) + geom_point(size = 2) + geom_smooth(method = "lm", formula = y ~ x, # 这里用映射后的x、y即可,不要写原列名 se = FALSE, # 关闭置信区间阴影,只保留直线 col = "red", linewidth = 1.5) + labs( x = "Year", y = "Values (%)", title = "Profit on equity" ) + theme_bw()
排错提示
如果运行后还是不显示趋势线,先单独执行lm(values ~ b, data = df)看是否报错:
- 如果报"object not found",检查列名是否拼写正确,有没有多余空格、大小写错误
- 如果模型能正常输出系数但线不显示,检查年份列
b是不是存成了字符/因子类型,改成数值型即可正常绘制
内容的提问来源于stack exchange,提问作者Benny Van
相关产品推荐
相关产品推荐

