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

ggplot2:柱状图与折线图的统一图例配置问题

解决双Y轴图表的图例优化问题

你需要移除图例中的红色方块,并给蓝色方块添加边框,同时统一柱状图和折线图的图例标识。以下是修改后的可复现代码:

set.seed(123) # 设置随机种子保证结果可复现
df <- data.frame(value1 = runif(100, 0, 1), 
                 value2 = runif(100, 0, 100),
                 weight = runif(100, 1, 5),
                 group = rep(c("A","B","C","D","E"), 20))

df$value2 <- df$value2/100
ggplot(df) + 
  aes(weight = weight) + 
  # 柱状图:同时映射fill和color,便于控制图例边框
  stat_weighted_mean(aes(x = group, y = value1, fill = "Value 1", color = "Value 1"), geom = "bar") +
  # 折线图:保留color映射
  stat_weighted_mean(aes(x = group, y = value2, group = 1, color = "Value 2"), geom = "line") +
  # 点层:将color纳入映射,统一由scale控制样式
  stat_weighted_mean(aes(x = group, y = value2, color = "Value 2"), geom = "point") +
  scale_y_continuous(sec.axis = sec_axis(~.x/100, name = "Value 2")) + 
  labs(x = "分组", y = "Value 1") + 
  # 配置fill的样式
  scale_fill_manual(name = "图例", breaks = c("Value 1", "Value 2"), 
                    values = c("Value 1" = "#92C5DE", "Value 2" = NA)) +
  # 配置color的样式,同时覆盖图例显示
  scale_color_manual(name = "图例", breaks = c("Value 1", "Value 2"), 
                     values = c("Value 1" = "#143a67", "Value 2" = "#D6604D"),
                     guide = guide_legend(override.aes = list(
                       shape = c(15, 16),  # Value1用方块,Value2用圆点
                       linetype = c("blank", "solid"),  # Value1无折线,Value2显示折线
                       fill = c("#92C5DE", NA)  # Value1填充蓝色,Value2无填充
                     ))) +
  # 合并fill和color的图例,避免重复显示
  guides(fill = guide_legend(override.aes = list(shape = 15, linetype = "blank")),
         color = guide_legend(override.aes = list(shape = c(15, 16), linetype = c("blank", "solid"))))

关键修改说明:

  • 把柱状图的fill和color都加入映射,实现蓝色方块带深色边框的效果;
  • 将点层的固定color改为映射到"Value 2",消除图例中多余的红色方块;
  • 通过guide_legend的override.aes参数,分别指定两个图例项的形状、折线样式和填充色,让图例与图表元素对应;
  • 合并fill和color的图例,保证只显示一个统一的图例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:45:18