You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:05:07