You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改使用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)
}

关键修改说明

  1. 修复theme_bw不生效问题:ggplot的主题配置遵循后写覆盖前写的规则,将theme_bw()放在自定义theme()之前,既可以保留黑白主题的基础风格,自定义的图例位置、字体参数也能正常覆盖生效,不会出现冲突。
  2. 实现灰度配色:新增scale_color_grey()和scale_fill_grey()两个尺度函数,分别对应折线的颜色映射、误差带的填充映射,通过调整start(数值越小灰度越深)和end(数值越大灰度越浅)参数可以自定义灰度区间,避免配色过深或过浅。
  3. 合并双图例并重命名:两个stat_summary图层分别用了color和fill两个美学映射,默认会生成两个独立图例。只要给两个尺度函数设置完全相同的name参数,ggplot会自动将两个图例合并为一个,name参数的取值就是最终显示的图例名称,直接修改即可。

内容的提问来源于stack exchange,提问作者ademait

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:54:04