如何在ggplot2的facet_wrap中为指定区域设置线条颜色
ggplot2多面折线图颜色修正方案
问题根源
- 原代码中
geom_line(color = "red")未限定数据范围,会把全量数据重新绘制为红色,直接覆盖了之前的灰色线,导致所有区域折线都变成红色。 - 存在无效筛选条件
Area2 == "Total Core Trauma",你的数据里只有"National",这行代码完全没生效。 - 重复绘制National线,代码逻辑冗余混乱。
修改思路
按颜色需求拆分图层绘制,确保每个图层只处理对应数据:
- 先画非重点区域(排除Region9、11、National)的深蓝色线
- 再画Region9、11的红色线
- 最后画National的黑色线(确保在所有子图显示)
- 清理冗余的aes定义和无效代码,让逻辑更清晰
完整修正代码
library(ggplot2) library(dplyr) ggplot(example2, aes(x = Measure.Names, y = Measure.Values, group = Area2)) + # 1. 绘制非重点区域:深蓝色(排除Region9、11、National) geom_line(data = example2 %>% filter(!Area2 %in% c("Region 9", "Region 11", "National")), color = "darkblue") + # 2. 绘制重点区域:Region9和11设为红色 geom_line(data = example2 %>% filter(Area2 %in% c("Region 9", "Region 11")), color = "red") + # 3. 绘制National黑色线,所有子图显示 geom_line(data = example2 %>% filter(Area2 == "National"), color = "black") + # 添加数值标签 geom_text(aes(label = labels), hjust = 0.5, vjust = -1, size = 2.5, color = "black") + # 坐标轴和主题设置 scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + facet_wrap(~Area3, ncol = 3, scales = "free") + theme_bw() + theme( axis.title = element_blank(), strip.background = element_rect(fill = "navy"), strip.text = element_text(colour = 'white', face = "bold"), axis.text.y = element_blank(), axis.ticks.y = element_blank(), text = element_text(size = 10), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), panel.grid.major.x = element_line(size = 0.2, linetype = 2) )
关键修改说明
- 用
filter精准控制每个图层的数据范围,彻底避免图层覆盖问题 - 删除了原代码中无效的灰色线图层和重复的National绘制代码
- 统一了全局aes定义,减少冗余代码
内容的提问来源于stack exchange,提问作者Shehroz Malik
相关产品推荐
相关产品推荐

