ggplot2中geom_boxplot箱线图添加均值中位数图例不显示问题
问题原因
ggplot2仅会对aes()函数内部映射的图形属性(颜色、线型等)自动生成图例。你之前将color="red"、linetype="dashed"直接写在aes()外部,属于全局固定属性,不会触发生成图例,此前设置的scale_colour_manual没有对应的映射变量,因此无法生效。
调整后的代码
box %>% pivot_longer(cols = c(Total, EX, MD, CI, EI)) %>% ggplot(aes(x = name, y = value)) + geom_boxplot(fill="gray", aes(color = "median(中位数)", linetype = "median(中位数)")) + labs(x = "Burnout Dimension", y = "Likert Response Count") + stat_summary(fun = mean, geom = "errorbar", aes(ymax = ..y.., ymin = ..y.., color = "mean(均值)", linetype = "mean(均值)"), width = .75) + scale_colour_manual("统计量", values = c("median(中位数)" = "black", "mean(均值)" = "red")) + scale_linetype_manual("统计量", values = c("median(中位数)" = "solid", "mean(均值)" = "dashed")) + theme_minimal() + theme(text = element_text(family="Times New Roman", color="#595959", size=14), legend.position = "right", panel.grid.major.y = element_line(c(0,25,50,75,100), color="#D9D9D9", size=0.2), panel.grid.minor = element_blank(), panel.grid.major.x = element_blank(), panel.background = element_blank())
关键修改说明
- 将颜色、线型属性移入
aes()内部,用自定义的分类标签作为映射值,触发图例自动生成 - 两个
scale_*_manual设置相同的图例名称("统计量"),会自动合并为同一个图例,每个标签对应的样式完全匹配你的需求 - 修正了原有代码中
panel.grid.major = element_blank()会误删y轴主网格的问题,改为仅删除x轴主网格,保留原有绘图样式
内容的提问来源于stack exchange,提问作者IsobelR
相关产品推荐
相关产品推荐

