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

强制ggplot2显示堆叠柱状图与geom_line折线图的图例

ggplot2堆叠柱状图+折线图图例不显示问题解决

问题描述

使用ggplot2绘制堆叠柱状图(对应数据集Broods列)和折线图(对应Parasites列),两者基于同一数据集,但始终无法显示对应图例;同时需要隐藏坐标轴标注。

数据集

par_brood_2020 <- structure(
  list(
    `Prevalence-host.age.relationship` = c("<7 days", "7-10 days", "10-12 days", "12-15 days", "15-20 days", "20-25 days"),
    Broods = c(6, 6, 3, 2, 4, 1),
    Parasites = c(92, 66, 32, 9, 27, 5)
  ),
  row.names = c(NA, 6L),
  class = "data.frame"
)

原代码问题分析

  1. 语法规范问题:直接在aes()中用par_nest_2020$列名引用数据,不符合ggplot2的映射逻辑,易导致混乱
  2. 图层重复:geom_col()和geom_bar(stat="identity")功能完全一致,无需重复调用
  3. 图例映射缺失:柱状图的fill、折线图的col未放入aes()中,ggplot2无法识别这些视觉属性来生成图例
  4. 变量名不匹配:代码中使用par_nest_2020,但提供的数据集是par_brood_2020;且代码中Nestlings列在数据集里不存在,推测是Broods的笔误

修正后的代码

library(ggplot2)

ggplot(par_brood_2020, aes(x = `Prevalence-host.age.relationship`)) +
  # 绘制柱状图,将fill放入aes中定义图例项
  geom_col(aes(y = Broods, fill = "Broods"), width = 0.6) +
  # 绘制折线图,将color放入aes中定义图例项,group=1确保折线连续
  geom_line(aes(y = Parasites, color = "Parasites"), group = 1, linewidth = 1) +
  # 手动设置填充色和线条颜色,统一图例名称实现合并
  scale_fill_manual(name = "", values = c("Broods" = "#808080")) +
  scale_color_manual(name = "", values = c("Parasites" = "#E60000")) +
  # 隐藏坐标轴标注
  xlab("") +
  ylab("") +
  ggtitle("2020 - HOST-AGE RELATIONSHIP") +
  theme_classic() +
  theme(
    legend.key.size = unit(10, "pt"),
    axis.line.x = element_line(colour = 'black', size=0.5, linetype='solid'),
    axis.line.y = element_line(colour = 'black', size=0.5, linetype='solid'),
    title = element_text(face="plain", size = 12),
    plot.title = element_text(hjust = 0.5, vjust = 2),
    axis.text.x = element_text(angle = 45, hjust=1),
    panel.background = element_blank()
  )

关键修正说明

  • 将fill(柱状图)和color(折线图)的视觉属性放入aes(),并指定对应的图例名称,让ggplot2生成对应的图例项
  • 移除重复图层调用,精简代码
  • 统一数据集和列名,修正笔误
  • 通过scale_fill_manual和scale_color_manual设置相同的图例名称,实现两个图例的合并显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:35:37