R ggplot2如何修改geom_label_repel后的图例符号为圆点?
问题原因
图例符号从圆点变成字母样式,是因为geom_label_repel继承了全局设定的color = condition美学映射,默认会把自身图层的标识合并到color对应的图例里,替代了原本geom_point生成的圆点图例,最终呈现的图标是带文本块的标签样式,和预期不符。
解决思路
- 最直接的调整方式是关闭
geom_label_repel的图例显示:文本标注是直接展示在图面的元素,本身不需要在图例中重复出现,给该图层添加show.legend = FALSE参数,就能彻底避免标签图层抢占geom_point的图例标识。 - 如果调整后图例仍有残留的标签样式,可以通过
guides()手动指定color图例的元素样式,强制覆盖为圆点:guides(color = guide_legend(override.aes = list(shape = 16))) - 顺带修正原代码里的两处无效配置:
- 原有代码中的
scale_shape_discrete(shape = 17)无法生效:全局映射没有将shape关联到任何变量,该缩放规则找不到对应的映射维度;同时函数参数写法错误,scale_shape_discrete()需要通过values参数指定不同分类对应的形状,而非直接传入shape = 17。如果不需要自定义点的形状,这行代码可以直接删除。 - 关闭标签层的图例显示后,color映射的图例会自动关联到
geom_point图层,恢复为圆点样式。
- 原有代码中的
修改后的可运行代码
ggplot(CI_bar_df_null, mapping = aes(x = model, y = R2, color = condition, group = condition)) + geom_point() + geom_line() + geom_label_repel( label = CI_bar_df_null$R2factor, nudge_x = .3, nudge_y = 0, show.legend = FALSE # 核心调整:关闭标签层的图例展示 ) + geom_errorbar(aes(ymin = CI_lower, ymax = CI_upper), width = .3) + ggtitle('Model R-Squared Values and Confidence Intervals') + ylab('R-Squared Value') + xlab('Model Type') + scale_color_discrete(name = "Condition")
未修改时的绘图效果参考

内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

