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

双Y轴柱状+折线图图例不显示及图例线型移除问题

解决ggplot双Y轴图表图例显示问题

问题分析

原代码存在三个核心问题导致图例无法正常显示且线型多余:

  1. geom_bar同时在aes内部定义fill映射,又在外部设置fill=valuecolor,外部参数覆盖了映射关系,导致柱状图图例不生成。
  2. scale_fill_manual中错误引用了数据列ValueUS,而非自定义的颜色变量valuecolor。
  3. geom_line的颜色设置在外部,未参与图例映射,且用lty映射生成了多余的线型标记。

修正后的代码

valuecolor <- "#69b3a2"
numbercolor <- rgb(0.2, 0.6, 0.9, 1)

ggplot(data = ma) +
  # 柱状图:仅在aes内定义fill映射,移除外部fill参数
  geom_bar(aes(x = Year, y = ValueUS, fill = "ValueUS"), 
           stat = "identity", color="black", alpha=.4) + 
  # 折线图:将color移至aes内映射,移除外部color参数,删除lty映射
  geom_line(aes(x = Year, y = NumberUS/10, group = 1, color = "Number US deals"), 
           size = 1) +
  scale_y_continuous(sec.axis = sec_axis(~.*10, name = "Number")) +
  # 统一图例名称,设置柱状图颜色
  scale_fill_manual(name = "指标", values = c("ValueUS" = valuecolor)) +
  # 匹配图例名称,设置折线图颜色
  scale_color_manual(name = "指标", values = c("Number US deals" = numbercolor)) +
  # 合并图例并调整样式:移除折线图例的线型标记,优化柱状图图例
  guides(fill = guide_legend(override.aes = list(color = NA)),
         color = guide_legend(override.aes = list(fill = NA, linetype = 1))) +
  theme_ipsum()

关键修正说明

  • 恢复映射关系:移除geom_bar的外部fill参数,保留aes内的fill映射;将geom_line的color移至aes内,让两个元素的属性都参与图例生成。
  • 统一图例:将scale_fill_manual和scale_color_manual的name设为相同值(如"指标"),实现两个图例的合并。
  • 移除多余线型:通过guides的override.aes设置折线图的linetype=1(实线),同时确保图例仅显示颜色和对应图形,消除多余的线型标记。
  • 修正颜色引用:将scale_fill_manual中的ValueUS改为自定义的valuecolor,确保颜色正确映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:55:30