如何修改使用stat_summary的ggplot的主题配色与图例设置
解决方案
修改后的完整代码
drawCombinedSeries <- function(data, xData, yData, dataGroup, title, fileName, outputPath) { plt <- ggplot(data, aes(x = xData, y = yData, fill = dataGroup)) + stat_summary(geom = "line", size=1, fun = mean, aes(color=dataGroup, group = dataGroup)) + stat_summary(geom = "ribbon", fun.data = mean_se, alpha = 0.3, aes(fill = dataGroup)) + labs(title = title, x="Month", y="") + # theme_bw放在自定义theme之前,避免自定义参数被覆盖 theme_bw() + theme(legend.position="bottom", axis.title.x = element_blank(), text = element_text(size=12, colour="black")) + scale_x_discrete(name = "Month", limits=c(1:12), expand = c(0,0)) + # 统一设置灰度配色,两个尺度的name参数一致可自动合并图例 scale_color_grey(name = "自定义图例名", start = 0.2, end = 0.7) + scale_fill_grey(name = "自定义图例名", start = 0.2, end = 0.7) setwd(outputPath) ggsave(filename=fileName, width=10, height = 2.5) return(plt) }
关键修改说明
- 修复theme_bw不生效问题:ggplot的主题配置遵循后写覆盖前写的规则,将
theme_bw()放在自定义theme()之前,既可以保留黑白主题的基础风格,自定义的图例位置、字体参数也能正常覆盖生效,不会出现冲突。 - 实现灰度配色:新增
scale_color_grey()和scale_fill_grey()两个尺度函数,分别对应折线的颜色映射、误差带的填充映射,通过调整start(数值越小灰度越深)和end(数值越大灰度越浅)参数可以自定义灰度区间,避免配色过深或过浅。 - 合并双图例并重命名:两个stat_summary图层分别用了
color和fill两个美学映射,默认会生成两个独立图例。只要给两个尺度函数设置完全相同的name参数,ggplot会自动将两个图例合并为一个,name参数的取值就是最终显示的图例名称,直接修改即可。
内容的提问来源于stack exchange,提问作者ademait
相关产品推荐
相关产品推荐

