如何在ggplot2中为折线图的误差棒设置独立颜色
问题原因
你当前代码的问题在于geom_errorbar()层中手动指定了静态参数color="blue",该参数会覆盖ggplot全局美学映射aes(color=condition)的分组逻辑,导致所有分组的误差棒都强制显示为蓝色,同时原有代码的scale_color_manual中第二个颜色值缺少十六进制颜色必备的#前缀,运行时会报错。
解决方法1:误差棒与对应分组折线颜色一致
直接删除geom_errorbar()中的color="blue"参数即可,误差棒会自动继承全局的颜色分组映射,和对应分组的折线颜色保持一致。修改后代码如下:
# 加载依赖包 library(ggplot2) # 构造示例数据 col_1<-c(1:4, 1:4) col_2<-c(25, 30, 28, 28, 35, 36, 39, 40) er_bar<-c(3, 3, 2, 2, 2,4,4,3) condition<-c("A","A","A","A", "B","B","B","B") example<-data.frame(col_1, col_2, er_bar, condition) # 绘图代码 ggplot(example, aes(col_1, col_2, color=condition))+ geom_line(size=0.1)+ # 移除静态color赋值,自动继承全局颜色映射 geom_errorbar(aes(ymin=col_2-er_bar, ymax=col_2+er_bar), width=.1)+ # 修正十六进制颜色的#号缺失 scale_color_manual(values=c("#FF0000", "#254117"))
解决方法2:误差棒颜色与折线颜色独立设置
如果需要让误差棒颜色和对应折线不一样,同时不同分组的误差棒颜色也独立,可以将折线和误差棒的颜色映射分开定义,再在scale_color_manual中为所有映射值单独指定颜色即可,示例代码如下:
ggplot(example, aes(col_1, col_2, group=condition))+ geom_line(aes(color=condition), size=0.1)+ # 为误差棒单独设置颜色映射 geom_errorbar(aes(ymin=col_2-er_bar, ymax=col_2+er_bar, color=paste0(condition,"_err")), width=.1)+ # 为所有映射项分别指定颜色 scale_color_manual(values=c( "A"="#FF0000", "B"="#254117", "A_err"="#FFB6C1", "B_err"="#2E8B57" ))
内容的提问来源于stack exchange,提问作者Lina Bird
相关产品推荐
相关产品推荐

