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

