无需额外包,为ggplot添加独立均值点图例的实现方法
在ggplot中为均值点添加独立图例的实现方法
当然可以实现。核心思路是把均值点的颜色纳入ggplot的颜色映射系统(即放到aes()内部),再通过scale_color_manual()统一管理所有系列的颜色,这样就能让均值点的条目自动加入图例。
完整实现代码
library(tidyverse) # 准备原始数据 y1 <- c(10,20,25) y2 <- c(20,40,30) adf <- data.frame(x=c('a','b','c'),y1=y1,y2=y2) ldf <- adf |> pivot_longer(cols=c(y1,y2), names_to='ymethod',values_to='yval') # 绘制基础图(带连线的两组点) p <- ggplot(data=ldf)+ geom_point(aes(x=x,y=yval, colour = ymethod), size=3) + geom_line(aes(x=x,y=yval, colour = ymethod,group=ymethod)) # 添加均值点并纳入颜色映射 p <- p + geom_point( data=adf |> mutate(am=0.5*(y1+y2)), aes(x=x,y=am, colour='Mean'), # 将'Mean'作为颜色映射的类别 size=3, shape=18 # 自定义点的形状和大小,区分于原始点 ) + # 统一设置所有系列的颜色,包含原有y1/y2和新增的Mean scale_color_manual( name='数据类型', # 自定义图例标题 values=c( 'y1'='#F8766D', # 原始y1的颜色(ggplot默认红色) 'y2'='#00BFC4', # 原始y2的颜色(ggplot默认蓝色) 'Mean'='black' # 均值点的颜色 ) ) print(p)
关键说明
- 必须把均值点的
colour参数放到aes()内部,赋值为新类别名(比如'Mean'),这样ggplot才会将其视为需要生成图例的系列。 - 使用
scale_color_manual()时,要包含所有需要展示的颜色类别:原有ymethod的y1、y2,以及新增的Mean,否则会覆盖原有颜色映射,导致原始点颜色异常。 - 可通过
size、shape参数调整均值点样式,让它和原始点更易区分。
内容的提问来源于stack exchange,提问作者PM.
相关产品推荐
相关产品推荐

