如何为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
相关产品推荐
相关产品推荐

