如何在同一ggplot2图中基于同一数据集绘制多条回归模型曲线?
实现方案
完全可以实现该需求,你只需在geom_smooth和stat_poly_eq图层中单独指定对应子集的数据源,即可为n=5、n=8、n=10三个分组分别生成回归线和对应的统计标签。
操作说明
- 提前标记数据集里每条观测所属的样本量分组,或者直接筛选出三个样本量对应的子集
- 每个分组的回归线和统计公式单独做一个图层,指定对应的数据子集,可设置不同颜色区分分组,同时调整公式标签位置避免重叠
参考代码
# 替换为你自己的全数据集名称,提前筛选三个样本量子集 n5_df <- 全数据集[全数据集$样本量列 == 5, ] n8_df <- 全数据集[全数据集$样本量列 == 8, ] n10_df <- 全数据集[全数据集$样本量列 == 10, ] # 完整绘图代码,替换x/y为你自己的变量名 ggplot(全数据集, aes(x = Log_antibodies_GTM, y = Vaccine_efficacy)) + # 原有全数据集散点图层 geom_point(aes(fill = Vaccine), pch = 21, color = 'black', size = 4) + scale_fill_manual(values = color_list3) + # 分别为三个子集添加回归线,设置不同颜色便于区分 geom_smooth(data = n5_df, method='lm', se=F, color="#E41A1C", size = 0.5) + geom_smooth(data = n8_df, method='lm', se=F, color="#377EB8", size = 0.5) + geom_smooth(data = n10_df, method='lm', se=F, color="#4DAF4A", size = 0.5) + # 分别为三个子集添加回归方程和R²标签,调整y坐标避免重叠 stat_poly_eq(data = n5_df, formula = y ~ x, aes(label = paste("n=5: ", ..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE, y = 0.95) + stat_poly_eq(data = n8_df, formula = y ~ x, aes(label = paste("n=8: ", ..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE, y = 0.9) + stat_poly_eq(data = n10_df, formula = y ~ x, aes(label = paste("n=10: ", ..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE, y = 0.85) + # 原有主题与坐标轴配置 theme_classic() + theme(legend.title = element_text(face = "bold", hjust = 0.5), legend.background = element_blank(), legend.box.background = element_rect(colour = "black")) + coord_capped_cart(bottom = 'both', left = 'both') + labs(x = 'Log antibodies (GTM)', y = 'Vaccine efficacy')
注意事项
- 如果你需要散点也按样本量分组展示样式,可同样给
geom_point指定子集数据源,调整颜色、形状等映射参数 - 不想提前保存子集的话,也可以直接在图层的
data参数里写筛选逻辑,比如data = ~.x[.x$样本量列 ==5,] - 回归公式的y坐标可以根据你的图实际y轴范围调整,也可以用
vjust参数微调垂直位置
内容的提问来源于stack exchange,提问作者Paula Castiblanco
相关产品推荐
相关产品推荐

