R语言ggplot2同列双值条形图如何统一设置柱色为dodgerblue4
分组条形图调整方案
原代码现存问题
- 采用宽格式数据结构,缺少分组维度,即便设置了
position = "dodge"也只能生成单根柱,无法实现同x分类下两根并排柱的效果 - 将连续型变量
paper_ui直接映射给fill属性,会触发ggplot默认的蓝色连续渐变,导致同一系列的柱颜色深浅不一,无法统一指定色值
具体修改逻辑
- 先将宽数据重塑为长格式,把两个统计指标(总论文数、UI方法论文数)整理为分类维度下的统一数值列,为并排柱提供分组依据
- 调整aes映射逻辑,将y轴绑定为统一的数值列,fill属性绑定为指标分类,替代原先的连续变量映射
- 手动指定填充色值,将所有蓝色柱统一设置为
dodgerblue4,消除渐变效果 - 完全保留原代码的主题、坐标轴设置,维持一致的视觉风格
完整可运行代码
library(ggplot2) library(tidyr) # 原始数据 n_papers <- c(6,4,5,1,6,2,1) paper_ui <- c(3,2,4,0,1,1,0) methods <- c("AR","ARMA",'ARIMA',"SARIMA","Loess \n decomposition","Classical \n decomposition","Exponential \n smoothing") df <- data.frame(n_papers,paper_ui,methods) # 宽格式转长格式,生成分组维度 df_long <- df %>% pivot_longer( cols = c(n_papers, paper_ui), names_to = "metric", values_to = "value" ) ggplot(df_long) + aes(x = methods, y = value, fill = metric) + geom_bar( stat = "identity", position = position_dodge(width = 0.8), show.legend = FALSE ) + # 统一蓝色柱为dodgerblue4,若需提升辨识度可将paper_ui对应色值调整为浅灰/浅蓝 scale_fill_manual(values = c("n_papers" = "dodgerblue4", "paper_ui" = "dodgerblue4")) + labs(x = NULL, y = "Number of papers") + theme_bw() + theme( panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.line = element_line(colour = "black") )
补充说明:如果觉得两根同色柱辨识度不足,可将
paper_ui对应的色值改为非深蓝色(比如浅灰色"#cccccc"),既不影响蓝色柱统一为dodgerblue4的要求,也能提升两组柱的区分度。
内容的提问来源于stack exchange,提问作者macs2021
相关产品推荐
相关产品推荐

