ggplot geom_pointrange如何独立设置点描边与区间线颜色
问题描述
基于R内置iris鸢尾花数据集,需要绘制不同物种花瓣长度的均值±标准差误差棒图,初始最小可复现代码如下:
library(tidyverse) i2 <- iris %>% select(Species, Petal.Length) %>% pivot_longer(-Species, names_to='petal', values_to='measure') %>% group_by(Species) %>% summarise_at(vars(measure), list( mean= ~ mean(.), sd= ~ sd(.) )) ggplot(i2, aes(x=Species, y=mean)) + geom_pointrange(aes(ymin=mean-sd, ymax=mean+sd, colour=Species), shape=21, size=1, fill='black')
现有实现的局限:geom_pointrange的colour美学映射会同时控制误差区间竖线、中心点描边的颜色,即便选用支持独立设置填充色、描边色的shape=21点样式,也无法实现误差线、中心点描边颜色独立设置的效果。
预期效果参考:
解决方案
不要用单个geom_pointrange同时绘制误差线和中心点,将两个元素拆分为独立图层分别设置参数即可:
- 第一层用
geom_linerange专门绘制误差区间竖线,将颜色按Species映射,单独控制误差线颜色 - 第二层用
geom_point单独绘制中心点,可自由设置点的填充色、描边色、大小、形状,完全不受误差线颜色映射影响
修正后可实现目标效果的代码如下:
ggplot(i2, aes(x=Species, y=mean)) + # 绘制误差竖线,颜色按物种映射 geom_linerange(aes(ymin=mean-sd, ymax=mean+sd, colour=Species), size=1) + # 单独绘制中心点,可独立调整样式,示例为黑色填充黑色描边,和参考效果一致 geom_point(shape=21, size=3, fill='black', colour='black') + # 可按需自定义误差线配色 scale_colour_brewer(palette = "Set1")
如果需要给中心点设置和误差线不同的描边色,仅需修改geom_point中的colour参数即可,比如设置白色描边可改为colour='white',调整不会对误差线颜色产生任何影响。
内容的提问来源于stack exchange,提问作者francoiskroll
相关产品推荐
相关产品推荐

