R语言ggplot2绘图时回归线不显示的原因排查求助
问题原因
你的猜测正确,回归线无法正常显示的核心原因是Date2变量为字符类型:线性回归要求自变量为数值类型,ggplot2也无法对离散的字符型x轴拟合线性趋势。同时你在循环中补充的年份为整数类型,和原字符型Date2混合后会导致变量类型混乱,进一步影响拟合结果。
修复步骤
- 转换
Date2为数值类型
在生成daily2汇总表后,新增一行代码将字符型年份转为数值型:
daily2 = ddply(daily, .(site_no, Date2), summarise, mean_Flow = mean(Flow)*(0.0283168)) # 新增:将年份转为数值型 daily2$Date2 <- as.numeric(daily2$Date2)
- 优化绘图代码
转换类型后,x轴变为连续数值轴,可以正常拟合线性回归,同时你之前注释的x轴刻度配置也可以正常使用,推荐修改绘图部分代码如下:
p1 = ggplot(daily2,aes(Date2,mean_Flow)) + geom_line(group = 1, na.rm = TRUE) + # 新增na.rm=TRUE避免缺失值警告 geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x, na.rm = TRUE) + geom_text(x = 1950, y = 700, label = lm_eqn(daily2), parse = TRUE) + theme_classic()+ labs(x="", y=(expression(Discharge~(m^{3}~s^{-1}))))+ scale_y_continuous(limits = c(0,800))+ # 恢复x轴配置,每10年设置一个刻度更易读 scale_x_continuous(limits = c(1900,2021), breaks = seq(1900,2021,10)) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) p1
修改完成后运行代码即可正常显示回归线和拟合公式。
内容的提问来源于stack exchange,提问作者Kelsey
相关产品推荐
相关产品推荐

