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

如何在同一张图中绘制两年份的线性回归线及对应回归方程?

合并年份回归线与回归方程的实现方案

完整修改代码

library(ggplot2)
library(ggpmisc)

# 加载数据集
df <- structure(list(Year = c(2017, 2017, 2017, 2017, 2017, 2017, 2021, 
2021, 2021, 2021, 2021, 2021), Variety = c("Sultana - MG 000", 
"ES Pallador - MG I", "Isidor - MG I", "Santana - MG I/II", "Blancas - MG II", 
"Ecudor - MG II", "Sultana - MG 000", "ES Pallador - MG I", "Isidor - MG I", 
"Santana - MG I/II", "Blancas - MG II", "Ecudor - MG II"), FTSWt = c(0.91, 
0.79, 0.92, 0.48, 0.51, 0.46, 0.93, 0.59, 0.58, 0.44, 0.48, 0.52
), SLA = c(85.38, 111.94, 108.56, 120.54, 130.14, 123.25, 109.05, 
149.97, 168.64, 162.96, 140.18, 175.1)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -12L))

ggplot(df, aes(y = FTSWt, x = SLA)) +
  # 散点按品种区分颜色
  geom_point(aes(color = Variety), size = 3) +
  # 按年份分组拟合回归线,颜色区分年份
  geom_smooth(aes(color = factor(Year), group = Year), 
              method = "lm", formula = y ~ x, se = FALSE) +
  # 按年份生成回归方程,颜色与对应回归线一致,调整位置避免重叠
  stat_poly_eq(aes(color = factor(Year), group = Year,
                   label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
               label.x.npc = "right", 
               label.y.npc = c(0.85, 0.75),
               formula = y ~ x, parse = TRUE, size = 4) +
  # 品种标签防重叠
  geom_text_repel(aes(label = Variety, color = Variety)) +
  # 手动指定品种和年份的颜色映射
  scale_color_manual(values = c(
    "Sultana - MG 000" = "#E41A1C",
    "ES Pallador - MG I" = "#377EB8",
    "Isidor - MG I" = "#4DAF4A",
    "Santana - MG I/II" = "#984EA3",
    "Blancas - MG II" = "#FF7F00",
    "Ecudor - MG II" = "#A65628",
    "2017" = "darkblue",
    "2021" = "darkred"
  )) +
  # 修正原代码中坐标轴标签的错误映射
  labs(y = "FTSWt", x = "SLA", color = "类别") +
  theme_bw() + 
  theme(panel.grid = element_blank(),
        axis.text.x = element_text(size=12, vjust=0.5),
        axis.text.y = element_text(size=12),
        axis.title.x = element_text(size = 12),
        axis.title.y = element_text(size = 12),
        legend.title = element_text(size=13),
        legend.text = element_text(size=11))

关键修改说明

  • 移除分面并分组回归:删除facet_wrap(~Year),在geom_smooth和stat_poly_eq中添加group = Year和color = factor(Year),让ggplot按年份分别计算回归模型,并用颜色区分两条回归线及对应方程。
  • 修正坐标轴标签:原代码中y轴和x轴的标签与变量对应关系错误,已调整为正确的映射。
  • 避免方程重叠:通过label.y.npc = c(0.85, 0.75)给两个年份的回归方程设置不同的垂直位置,防止文字重叠。
  • 明确颜色映射:在scale_color_manual中逐个指定品种和年份的颜色,确保视觉区分清晰,也可根据需求调整颜色值。

内容的提问来源于stack exchange,提问作者Chouette

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:20:30