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

R ggplot2自定义垂直线颜色及单图双图例设置方法

实现方法

场景1:仅展示垂直线对应的图例

直接通过scale_color_manual手动指定颜色,并隐藏折线的图例即可:

library(ggplot2)
# 预处理数据,过滤无效的Flag值避免警告
vline_df <- df[!is.na(df$Flag), ]

ggplot(data = df, aes(x = ADY, y = AVAL)) +
  geom_line(data = df[!is.na(df$AVAL),], 
            aes(color = PARAMCD), 
            size=0.8,
            show.legend = FALSE) + # 隐藏折线的图例
  geom_point() +
  geom_vline(data = vline_df,
             aes(xintercept = Flag, color=AESER),
             lty='dashed') +
  # 手动指定颜色,仅保留AESER的分类在图例中
  scale_color_manual(
    values = c("N" = "black", "Y" = "red", "VSTEMP" = "#008080"),
    breaks = c("N", "Y"),
    name = "不良事件严重程度"
  )

场景2:展示两个独立图例

需要借助ggnewscale包实现多套独立颜色标尺,生成两个互不干扰的图例块:

library(ggplot2)
library(ggnewscale) # 首次使用需先安装:install.packages("ggnewscale")
vline_df <- df[!is.na(df$Flag), ]

ggplot(data = df, aes(x = ADY, y = AVAL)) +
  # 第一部分:折线对应测量项图例
  geom_line(data = df[!is.na(df$AVAL),], 
            aes(color = PARAMCD), 
            size=0.8) +
  geom_point() +
  scale_color_manual(
    values = c("VSTEMP" = "#008080"),
    name = "测量项"
  ) +
  # 新增独立颜色标尺,后续颜色映射对应第二套图例
  new_scale_color() +
  # 第二部分:垂直线对应AESER图例
  geom_vline(data = vline_df,
             aes(xintercept = Flag, color=AESER),
             lty='dashed') +
  scale_color_manual(
    values = c("N" = "black", "Y" = "red"),
    name = "不良事件严重程度"
  )

小提示:原代码中yaxs="d", xaxs="d"属于坐标系参数,不能写在aes()内,需要放到coord_cartesian(xaxs = "d", yaxs = "d")中才会生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:03