如何消除ggplot2中theme_classic主题下facet_grid图例的阴影?
消除theme_classic主题下图例框的异常阴影
问题
使用theme_classic()做图时,图例框会出现奇怪的异常效果——其中两条线比另外两条粗,但这个主题最贴近APA格式,不想换掉;换成theme_bw()的话,阴影问题是解决了,但会多出一堆不需要的背景线条,不符合需求。
解决办法
直接在theme_classic()基础上自定义图例样式参数,就能保留主题风格的同时解决阴影问题。修改后的完整代码如下:
library(dplyr) library(tidyr) library(tidyverse) library("ggsignif") # 生成数据集(加set.seed保证结果可重复) set.seed(123) value <- sample(1:50, 100, replace = T) B <- as.factor(rep(c(1,2,2,1), 50)) C <- as.factor(rep(c(1,2), each=100)) A <- as.factor(rep(c(4,4,3,3,2,2,1,1), 25)) dt1 <- data.frame(A,B,C,value) %>% group_by(A,B,C) ggplot(dt1, aes(x=A, y=value, fill=B)) + theme_classic() + # 自定义图例样式,消除阴影并统一边框 theme( # 去掉图例内部每个项的边框和背景,避免重叠造成线条变粗的错觉 legend.key = element_rect(fill = "transparent", colour = NA), # 统一图例外框样式,用实线边框消除阴影 legend.background = element_rect( colour = "black", size = 1, fill = "transparent", linetype = "solid" ) ) + facet_wrap(vars(C)) + geom_boxplot(position='dodge', outlier.size=0) + geom_point(size=0.5, position=position_jitterdodge(0.2))
参数说明
legend.key:将图例内每个填充项的背景设为透明,移除默认边框,避免和外框重叠产生“线条变粗”的视觉异常legend.background:重新定义图例外框,使用统一粗细的黑色实线边框、透明填充,彻底消除阴影效果
这样既保留了theme_classic()贴近APA格式的特点,又解决了图例框的异常阴影问题。
内容的提问来源于stack exchange,提问作者SDahm
相关产品推荐
相关产品推荐

