R中线性回归模型绘图异常问题求助
问题排查与解决:双轴散点图添加回归线异常
异常原因分析
线性模型构建错误
你尝试的lm代码中,data=c(likes,vues)是错误用法:c()函数会将两个数据框拆解为向量拼接,而非合并成包含对应列的新数据框。即使移除data参数,直接用likes$X2022.12.30 ~ vues$X2022.12.30,若两个向量长度不匹配或对应关系错位,也会导致模型参数异常,画出错误回归线。双轴刻度不匹配
图表左侧y轴对应点赞量(范围0-120000),右侧y轴对应评论量(范围0-1500)。直接用abline添加评论回归线时,R默认使用左侧y轴刻度,评论量数值远小于点赞量,导致回归线被压缩到贴近x轴的位置,视觉上异常。绘图上下文坐标混乱
多次使用par(new=TRUE)叠加绘图时,后续plot会继承前一个绘图的坐标范围,但你手动指定了不同ylim,易引发坐标系统混乱,进一步干扰回归线位置。
解决方法
步骤1:合并数据确保对应关系
先将三个数据框的对应列合并为新数据框,保证每一行的浏览、点赞、评论数据严格对应:
# 合并数据(假设三个数据框行顺序完全匹配) combined_data <- data.frame( views = vues$X2022.12.30, likes = likes$X2022.12.30, comments = commentaires$X2022.12.30 )
步骤2:重新绘制图表并添加适配双轴的回归线
修改绘图代码,先处理点赞的散点图与回归线,再适配右侧y轴绘制评论的回归线:
# 初始化绘图参数 par(mar=c(4,4,4,4), bg="#FFECDE") # 绘制基础空图与背景矩形 plot(NA, xlim=c(0,1500000), ylim=c(0,120000), axes=FALSE, xlab="", ylab="", main="Nombre de j'aime et de commentaires en fonction du nombre de vues") rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], col="#E1DEFF") # 绘制点赞散点图+回归线 points(combined_data$views, combined_data$likes, col="red", pch=-0x2022, bg="red") lm_likes <- lm(likes ~ views, data=combined_data) abline(lm_likes, col="red", lwd=2) # 添加左侧y轴与标签 axis(2, col="red", col.axis="red", at=seq(0, 120000, by=20000)) mtext("Nombre de j'aime", side=2, line=2.5, col="red") # 绘制评论散点图+适配右侧轴的回归线 par(new=TRUE) plot(NA, xlim=c(0,1500000), ylim=c(0,1500), axes=FALSE, xlab="", ylab="") points(combined_data$views, combined_data$comments, col="blue", pch=-0x2022, bg="blue") lm_comments <- lm(comments ~ views, data=combined_data) # 将评论预测值按左右轴比例转换,适配左侧坐标系统 y_comments_pred <- predict(lm_comments) y_converted <- y_comments_pred * (120000 / 1500) lines(combined_data$views, y_converted, col="blue", lwd=2) # 添加右侧y轴与底部x轴 axis(4, col="blue", col.axis="blue", at=seq(0, 1500, by=250)) mtext("Nombre de commentaires", side=4, line=2.5, col="blue") axis(1, col="black", col.axis="black", at=seq(0, 1400000, by=100000)) mtext("Nombre de vues", side=1, line=2.5, col="black") # 添加图例 legend(x="topleft", legend=c("J'aime","Commentaires"), text.col="black", pch=c(-0x2022,-0x2022), col=c("red","blue"), bg="#C9FFF1", inset=0.02) box()
关键说明
- 合并数据框能确保
lm模型使用的x、y数据严格对应,避免因错位导致的模型异常。 - 评论回归线通过比例转换,将预测值映射到左侧y轴范围,保证绘制的线匹配右侧y轴实际刻度。
- 先绘制空基础图再叠加内容,比多次
plot叠加更稳定,避免坐标范围混乱。
内容的提问来源于stack exchange,提问作者mi1000
相关产品推荐
相关产品推荐

