ggplot2设置stat_summary填充透明度与图例,使点完全不透明
问题原因
你把alpha = as.factor(cyl)定义在了ggplot()的全局美学映射中,所有图层默认会继承该设置,因此stat_summary生成的点也被应用了可变透明度,导致辨识度下降。
解决方案
有两种常用修改方式可选:
方案1(更推荐):把alpha映射移到箱线图的局部设置
仅让alpha作用于箱线图图层,其他图层不会继承该映射,无需额外配置:
################################################################################ # !重要提示! # 假设`palette1`已预先定义,且在多幅图表间共享 ################################################################################ ncols = length(unique(mtcars$gear)) palette1 = scales::hue_pal()(ncols) names(palette1) = sort(unique(mtcars$gear)) p = ggplot(mtcars, aes(x=as.factor(gear), y=mpg, fill=as.factor(gear))) + # 移除全局alpha映射 geom_boxplot(aes(alpha=as.factor(cyl))) + # alpha移到箱线图的局部aes中 scale_alpha_discrete(range = c(0.1, 0.8),guide = guide_legend(override.aes = list(fill = "black"))) + rotate_x_text(45) + facet_grid(~gear,scale="free") + stat_summary(fun=mean, geom="point", shape=5, size=5,position = position_dodge(.75),stroke=1.5) # 点默认完全不透明 set_palette(p, palette1)
方案2:保留全局alpha映射,手动覆盖stat_summary的透明度
如果你的其他图层也需要用到全局alpha映射,可以在stat_summary中手动指定alpha=1覆盖全局设置,仅需要修改对应图层的参数即可:
stat_summary(fun=mean, geom="point", shape=5, size=5,position = position_dodge(.75),stroke=1.5, alpha = 1)
两种方案都可以让stat_summary生成的均值点完全不透明,叠加在箱线图上方清晰显示。
内容的提问来源于stack exchange,提问作者mkk
相关产品推荐
相关产品推荐

