如何在同一张图中绘制两年份的线性回归线及对应回归方程?
合并年份回归线与回归方程的实现方案
完整修改代码
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
相关产品推荐
相关产品推荐

