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

ggplot按其他列数值分多类别设置点线颜色及10+分类不显示问题

问题原因

  1. 折线的颜色逻辑限制:geom_line绘制的线段颜色默认取线段起点所属的分组颜色。如果属于10+分组的观测在时间序列上是孤立点,没有连续两个相邻的观测都属于10+分组,就不会出现对应颜色的线段,自然也不会触发图例显示该分类。
  2. 因子水平未显式定义:你直接对数值型的group列转因子,R会自动根据数据中实际出现的值生成因子水平,即使你在scale_color_manual里设置了10个标签,只要数据中没有产生可见的10分组绘图元素,该分类就会被自动丢弃。
  3. 冗余图层问题:代码中重复调用了两次geom_line,无意义的重复可能导致图层覆盖,隐藏部分颜色的显示。

解决方案

按如下方式修改代码即可:

  1. 生成group列时直接定义为因子,显式指定所有10个水平,避免自动生成水平的问题
  2. 在scale_color_manual中添加drop = FALSE参数,强制显示所有分类的图例
  3. 可额外添加散点图层,让孤立的10+分组观测也能显示对应颜色

修改后的完整代码如下:

All_Hourly_1 %>%
  mutate(group = factor(
    case_when(
      max_AQHI < 2 ~ 1,
      max_AQHI < 3 ~ 2,
      max_AQHI < 4 ~ 3,
      max_AQHI < 5 ~ 4,
      max_AQHI < 6 ~ 5,
      max_AQHI < 7 ~ 6,
      max_AQHI < 8 ~ 7,
      max_AQHI < 9 ~ 8,
      max_AQHI < 10 ~ 9,
      TRUE ~ 10
    ),
    levels = 1:10
  )) %>%
  ggplot(aes(x = date, y = PM_RAMP, color = group, group = 1)) +
  geom_line(size = 1) +
  # 可选:添加散点显示孤立点的颜色
  geom_point(size = 2) +
  scale_color_manual(
    values = c("deepskyblue1", "dodgerblue", "dodgerblue4", "yellow", "gold", "goldenrod", "lightcoral","red", "red3", "red4"),
    labels = c("1 (低风险)","2 (低风险)","3 (低风险)","4 (中风险)","5 (中风险)","6 (中风险)","7 (高风险)","8 (高风险)","9 (高风险)","10+ (极高风险)"),
    drop = FALSE
  ) +
  labs(
    colour = "空气质量健康指数值",
    x = "日期",
    y = expression(PM[2.5]~" (µg "~m^-3~")")
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:54:01