R语言ggplot2中如何为不同数据系列手动指定自定义alpha值
ggplot2手动指定分类变量映射的alpha值解决方案
问题原因
你之前的写法不生效的核心逻辑:
- 当你在
aes()中将alpha参数映射给region分类变量时,ggplot会默认按照内置规则生成不同类别的透明度,自定义映射值不能直接赋值给alpha参数,必须通过对应的比例尺函数设置。 - 若你尝试直接写
alpha=c(0.1,0.2,0.3):写在aes()内属于映射常量向量,和数据集行数不匹配会出现逻辑异常;写在aes()外属于全局设置,会给所有线条指定统一透明度,无法按region分类赋值。
解决代码
仅需在原有绘图代码基础上新增scale_alpha_manual()函数手动指定每个类别的alpha值即可:
library(ggplot2) library(tidyverse) mydate <- rep(seq.Date(from=as.Date('2021-1-1'),to=as.Date('2021-1-20'),by="1 day"),3) region <- c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C") sales <- c(22,24,5,5,19,23,1,13,19,19,25,26,8,29,23,21,13,30,6,25,57,50,51,48,48,40,40,47,55,59,57,41,60,52,57,55,42,52,58,43,97,98,88,90,83,90,84,96,95,98,89,80,99,84,83,80,93,82,83,97) plot_data <- data.frame(mydate,region,sales) plot_data$region <- factor(plot_data$region,levels=c("A","B","C")) plot_data %>% ggplot(aes(x=mydate,y=sales, color=region, alpha=region))+ geom_line()+ # 手动指定三个区域对应的alpha值,键值对写法不会受因子顺序变化影响 scale_alpha_manual(values = c("A" = 0.1, "B" = 0.2, "C" = 0.3)) + theme_bw()
可选优化
如果你不需要在图例中展示alpha的映射规则,可以添加参数隐藏alpha图例,避免和颜色图例重复:
scale_alpha_manual(values = c("A" = 0.1, "B" = 0.2, "C" = 0.3), guide = "none")
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

