如何用ggplot的stat_summary按颜色和线型分组绘制均值点连线图
解决ggplot均值连线图分组错误问题
问题根源
你的代码里stat_summary手动指定了group = Pre-Treatment,这会强制ggplot只按Pre-Treatment分组计算均值,完全忽略Treatment变量。所以同一Pre-Treatment下的不同Treatment数据会被合并汇总,画出错误的连线;而添加facet_grid(Treatment ~ .)后,每个分面里只有单一Treatment,分组逻辑又恢复正确,图表就正常了。
另外还有个语法问题:带连字符的变量名(比如Time-point、Pre-Treatment)需要用反引号``包裹,否则R会把连字符当成减号解析,可能引发报错。
修正后的代码
d.f %>% ggplot(mapping = aes(x = `Time-point`, y = Score, colour = `Pre-Treatment`, linetype = Treatment, shape = Treatment)) + # 原始数据点加透明度,避免遮挡均值线 geom_point(alpha = 0.3) + # 按Pre-Treatment+Treatment的组合计算均值并连线 stat_summary( fun = "mean", geom = "line", size = 1 ) + # 额外添加均值点,突出显示统计结果 stat_summary( fun = "mean", geom = "point", size = 3 )
代码说明
- 移除了
stat_summary里手动设置的group和color参数:ggplot默认会根据所有离散美学变量(这里是colour和linetype)的组合自动分组,这样就能正确按Pre-Treatment+Treatment的组合计算均值,画出对应颜色、线型的连线。 - 用反引号包裹带连字符的变量名,解决语法解析问题。
- 给原始点加
alpha = 0.3降低透明度,避免和均值点/线混淆;新增的均值点用更大的size突出显示,让图表层次更清晰。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

