ggplot2添加回归线报错及拟合两条曲线最优线的技术问题
ggplot2回归线报错修复及相关性分析方案
一、报错原因与修复
报错核心问题:
geom_smooth公式写法错误:直接使用数据框$变量违反ggplot语法,且混淆了自变量/因变量;日期类型无法直接参与线性回归运算,需转为数值。- 初始以
NULL作为数据源易引发映射混淆,合并数据集后绘图更清晰。
修复后的温度曲线绘图代码:
library(ggplot2) # 注意原代码中library(ggplot)为拼写错误,应为ggplot2 library(dplyr) # 合并两个温度数据集,添加分组标识 combined_temp <- bind_rows( DailyAvgL5 %>% mutate(group = "L5"), DailyDownGaugeAvg %>% mutate(group = "DownGauge") ) # 绘制带分组回归线的温度曲线 L5andDownTempAvgPlot <- ggplot(combined_temp, aes(Date, mean_temp, color = group)) + geom_line() + # 将Date转为数值后拟合线性回归线,se=FALSE关闭置信区间(可选) geom_smooth(method = "lm", formula = y ~ as.numeric(x), se = FALSE) + scale_color_manual(values = c("L5" = "black", "DownGauge" = "red")) + labs(title = "每日平均温度曲线", x = "日期", y = "平均温度") L5andDownTempAvgPlot
二、为两条曲线拟合统一最优回归线
若要为两组数据拟合同一条回归线,只需取消geom_smooth的分组限制:
# 拟合统一回归线的温度图 L5andDownTempAvgPlot_unified <- ggplot(combined_temp, aes(Date, mean_temp)) + geom_line(aes(color = group)) + # 指定group=1强制拟合单一回归线 geom_smooth(method = "lm", formula = y ~ as.numeric(x), se = TRUE, color = "blue", group = 1) + scale_color_manual(values = c("L5" = "black", "DownGauge" = "red")) + labs(title = "每日平均温度曲线(含统一回归线)", x = "日期", y = "平均温度") L5andDownTempAvgPlot_unified
三、两组mean_temp的相关性展示
先对齐两组数据的日期,再计算相关系数并可视化:
# 按日期合并两组温度数据,取交集 temp_cor_df <- inner_join( DailyAvgL5 %>% select(Date, L5_temp = mean_temp), DailyDownGaugeAvg %>% select(Date, Down_temp = mean_temp), by = "Date" ) # 计算Pearson相关系数 cor_coeff <- cor(temp_cor_df$L5_temp, temp_cor_df$Down_temp) cat("两组温度的Pearson相关系数:", round(cor_coeff, 3), "\n") # 绘制相关性散点图+回归线 correlation_plot <- ggplot(temp_cor_df, aes(L5_temp, Down_temp)) + geom_point(alpha = 0.6) + geom_smooth(method = "lm", se = TRUE) + labs(title = "L5与DownGauge平均温度相关性", x = "L5平均温度", y = "DownGauge平均温度", subtitle = paste("Pearson相关系数:", round(cor_coeff, 3))) correlation_plot
额外提示
- 原代码中
DownGaugeHeightAvgPlot可正常运行,若需手动控制日期变量,同样可使用as.numeric(Date)转换。 - ggplot语法中,应依赖aes映射的变量名,避免直接使用
数据框$变量的写法,减少映射冲突。
内容的提问来源于stack exchange,提问作者Matt Schaaf
相关产品推荐
相关产品推荐

