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

如何在ggplot2的facet_wrap中为指定区域设置线条颜色

ggplot2多面折线图颜色修正方案

问题根源

  1. 原代码中geom_line(color = "red")未限定数据范围,会把全量数据重新绘制为红色,直接覆盖了之前的灰色线,导致所有区域折线都变成红色。
  2. 存在无效筛选条件Area2 == "Total Core Trauma",你的数据里只有"National",这行代码完全没生效。
  3. 重复绘制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:23:11