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

如何为ggplot2条形图的x轴设置指定配色并保留两个独立图例

实现代码

可直接运行的完整代码如下:

# 加载测试数据集
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")

library(ggplot2)
# 提取每个x分类对应的唯一轴颜色映射,避免重复取值
axis_color_map <- unique(data[, c("x", "Axis_color")])

ggplot(data, aes(x = x, y = y, fill = group)) +
  geom_bar(stat = "identity") +
  # 加入透明散点触发color映射生成第二个图例,不会影响主图显示
  geom_point(aes(color = Axis_color), alpha = 0) +
  coord_flip() +
  # 配置分组填充的颜色映射
  scale_fill_manual(values = color_list[c("F","G","H","I","J")]) +
  # 配置轴颜色的映射与自定义图例名称
  scale_color_manual(name = "轴分类颜色", values = color_list[c("G1","G2","G3")]) +
  # 给翻转后的纵轴(原x轴)文本设置对应颜色
  theme(axis.text.y = element_text(color = color_list[axis_color_map$Axis_color]))
效果说明

运行后即可实现需求:

  • 条形按group字段填充对应颜色
  • 纵轴分类标签按Axis_color字段匹配color_list的对应颜色
  • 同时保留分组填充、轴分类颜色两个独立图例

内容的提问来源于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 01:39:03