ggplot2图例优化:仅保留颜色块,移除边框与内部标记
解决方案
要实现你想要的图例样式(无边框、纯填充方块无内部标记),我们可以通过修改图例的主题设置和覆盖图例的美学映射来完成。以下是调整后的完整代码:
library(ggplot2) library(plyr) N <- 25 IV1 <- c('level1', 'level1', 'level1', 'level1', 'level1', 'level1', 'level1', 'level1', 'level2', 'level2', 'level2', 'level2', 'level2', 'level2', 'level2', 'level2') IV2 <- c('level1', 'level1', 'level1', 'level1', 'level2', 'level2', 'level2', 'level2', 'level1', 'level1', 'level1', 'level1', 'level2', 'level2', 'level2', 'level2') IV3 <- c('level1', 'level1', 'level2', 'level2', 'level1', 'level1', 'level2', 'level2', 'level1', 'level1', 'level2', 'level2', 'level1', 'level1', 'level2', 'level2') IV4 <- c('level1', 'level2', 'level1', 'level2', 'level1', 'level2', 'level1', 'level2', 'level1', 'level2', 'level1', 'level2', 'level1', 'level2', 'level1', 'level2') exampleData <- data.frame(subNum = rep(1:N, each = 16), DV = rnorm(N*length(IV1)), IV1 = factor(rep(IV1, N), levels = c('level1', 'level2')), IV2 = factor(rep(IV2, N), levels = c('level1', 'level2')), IV3 = factor(rep(IV3, N), levels = c('level1', 'level2')), IV4 = factor(rep(IV4, N), levels = c('level1', 'level2'))) exampleDataSummary <- ddply(exampleData, c('IV1', 'IV2', 'IV3', 'IV4'), summarise, meanDV = mean(DV), N = length(DV), sdDV = sd(DV), seDV = sdDV/sqrt(N)) plot <- ggplot(exampleData, aes(y = DV, x = IV1, fill = IV2)) plot + facet_grid(IV3 ~ IV4) + geom_dotplot(binaxis = "y", alpha = 0.7, stackdir = "center", position = position_dodge(width = 1)) + geom_violin(aes(y = DV, fill = IV2), alpha = 0.5, position = position_dodge(width = 1)) + geom_point(aes(y = meanDV, x = IV1), data = exampleDataSummary, position = position_dodge(width = 1)) + geom_errorbar(aes(y = meanDV, ymin = meanDV - seDV, ymax = meanDV + seDV), color = "black", width = 0.2, data = exampleDataSummary, position = position_dodge(width = 1)) + # 调整图例美学:去掉内部标记,只保留填充方块 guides(fill = guide_legend(override.aes = list(shape = NA, color = NA))) + # 去掉图例边框和背景 theme( legend.background = element_blank(), legend.key = element_blank(), legend.box.background = element_blank() )
关键修改说明:
移除图例内部标记:
使用guides(fill = guide_legend(override.aes = list(shape = NA, color = NA)))覆盖了图例的美学映射:shape = NA:隐藏了图例中来自geom_point和geom_dotplot的圆形标记color = NA:确保图例方块没有额外的边框线条
移除图例边框:
通过theme()中的三个设置彻底清除图例的边框和背景:legend.background = element_blank():移除整个图例区域的背景和边框legend.key = element_blank():移除每个图例项的背景和边框legend.box.background = element_blank():移除图例容器的边框(如果存在)
这样修改后,你的图例就会变成纯填充的无边框方块,完全符合你想要的样式。
内容的提问来源于stack exchange,提问作者JAQuent
相关产品推荐
相关产品推荐

