You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ggplot2的geom_bar图添加Axis_color指定配色并展示双图例

实现代码

先加载依赖包、构造数据:

library(ggplot2)
library(dplyr)

# 导入示例数据
data <- structure(list(x = c("A", "A", "A", "A", "A", "B", "B", "B", 
"B", "B", "C", "C", "C", "C", "C", "D", "D", "D", "D", "D", "E", 
"E", "E", "E", "E"), y = c(25, 88, 88, 22, 18, 54, 25, 37, 68, 
72, 36, 84, 17, 64, 48, 15, 17, 72, 61, 25, 66, 10, 18, 99, 63
), group = c("F", "G", "H", "I", "J", "F", "G", "H", "I", "J", 
"F", "G", "H", "I", "J", "F", "G", "H", "I", "J", "F", "G", "H", 
"I", "J"), Axis_color = c("G1", "G1", "G1", "G1", "G1", "G3", 
"G3", "G3", "G3", "G3", "G1", "G1", "G1", "G1", "G1", "G2", "G2", 
"G2", "G2", "G2", "G3", "G3", "G3", "G3", "G3")), row.names = c(NA, 
-25L), class = "data.frame")

# 自定义配色表
color_list<- c("F"="orange", "G"="darkgreen", "H"="grey", "I"="pink", "J"="purple", "G1"="blue","G2"="red","G3"="green")

提取每个分类x对应的轴标签颜色映射:

x_color_map <- data %>% 
  distinct(x, Axis_color) %>% 
  pull(Axis_color, name = x)

绘图核心代码:

ggplot(data, aes(x = x, y = y)) + 
  # 柱状图图层,填充映射到group字段
  geom_bar(stat = "identity", aes(fill = group)) +
  # 透明点图层,仅用于生成Axis_color对应的颜色图例
  geom_point(aes(color = Axis_color), alpha = 0) +
  coord_flip() +
  # 配置填充色,调用配色表中group对应色值
  scale_fill_manual(values = color_list[names(color_list) %in% unique(data$group)]) +
  # 配置轴分组色,调用配色表中G1/G2/G3对应色值
  scale_color_manual(name = "Axis分组", values = color_list[names(color_list) %in% unique(data$Axis_color)]) +
  # 设置y轴(翻转后的分类轴)标签颜色对应配置
  theme(axis.text.y = element_text(color = color_list[x_color_map])) +
  # 调整Axis分组图例样式,改为实心方形显示
  guides(color = guide_legend(override.aes = list(alpha = 1, shape = 15, size = 5)))

实现说明

  • 新增的透明geom_point图层仅用于触发color映射的图例生成,不会在图上显示多余元素
  • 通过distinct提取每个x分类对应的唯一Axis_color值,直接映射到分类轴的文字颜色
  • 两个scale_*_manual分别读取配色表中对应字段的色值,保证配色统一
  • 最终输出会生成两个独立图例:一个为group对应的填充色图例,一个为Axis_color对应的分组色图例

内容的提问来源于stack exchange,提问作者chippycentra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:06:03