如何将ggplot2中stat_summary生成的均值线条添加至图例?
解决stat_summary均值线条添加图例的问题
要让stat_summary()生成的均值线条出现在图例中,同时保留原有国家的图例,核心是把均值线的颜色映射到aes()内部,而非直接设置col参数。以下是修改后的完整代码:
library(ggplot2) library(dplyr) # 获取与ggplot默认配色一致的10个国家颜色 country_colors <- scales::hue_pal()(10) names(country_colors) <- c("Angola","Botswana","Lesotho","Malawi","Mozambique", "Namibia","Swaziland","South Africa","Zambia","Zimbabwe") gap %>% filter(country %in% names(country_colors)) %>% ggplot(aes(x=year,y=life_expectancy, col=country)) + geom_line(size=1.2, alpha=0.7)+ # 将均值线的颜色映射为分类项"Mean",触发图例生成 stat_summary(fun = mean, geom = "line", size= 1.5, aes(col="Mean"))+ theme_light()+ # 手动指定所有分类的颜色:保留国家默认色,给均值线设黑色 scale_color_manual(values = c(country_colors, "Mean" = "black"))+ labs(title="Evolució de l'expectativa de vida en l’Àfrica Austral", x= "1960-2016", y="Expectativa de vida", col= "Llegenda", tag = "Fig. 3")
关键修改说明:
- 将颜色放入
aes():aes(col="Mean")让ggplot把均值线识别为一个新的分类变量,自动为其生成图例条目。 - 手动统一配色:用
scale_color_manual()整合原有国家的默认配色和均值线的黑色,确保所有图例项的颜色与对应线条完全匹配。 - 保留默认国家色:通过
scales::hue_pal()生成和ggplot原生一致的国家线条颜色,避免修改后破坏原有视觉效果。
修改后图例会同时显示所有国家和"Mean"(均值)的条目,两者均正常展示。
内容的提问来源于stack exchange,提问作者Adrià
相关产品推荐
相关产品推荐

