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

ggplot2如何隐藏图表图例?移除图例名称时出现重复图例怎么办?

解决ggplot2中隐藏图例名称却出现两个图例的问题

我明白你遇到的困扰了——你同时用col和size两个美学属性映射了variavel变量,只在labs()里设置col = ""只会移除颜色图例的标题,但尺寸图例的默认标题variavel还保留着,所以ggplot会把两个图例分开显示,就出现了双图例的情况。

要解决这个问题,核心是同时处理两个美学映射的图例标题,下面提供两种简单的方案:

方案1:在labs()中同时设置col和size为空字符串

既然两个图例都基于同一个变量,我们可以直接在labs()里把col和size的标题都设为空,ggplot会自动将它们合并成一个图例:

dados_wide %>% 
  filter(variavel %in% c("mm30d","mm7d")) %>% 
  ggplot(aes(x = data, y = value, col = variavel, size = variavel)) + 
  geom_rect(aes(xmin = as.Date("2020-03-20"), xmax = as.Date(Sys.Date()), ymin = -Inf, ymax = +Inf), fill="#ffe6e6", alpha = 0.07, color = NA) + 
  geom_line() + 
  geom_hline(yintercept = 100) + 
  scale_x_date(date_labels = "%b-%Y") + 
  scale_color_manual(values=c('#B0ADAD','#454545')) + 
  scale_size_manual(values = c(0.4, 0.8)) + 
  labs(
    x = "", 
    y = "", 
    col = "",  # 隐藏颜色图例标题
    size = "", # 隐藏尺寸图例标题
    title = "Consumo de Energia Elétrica - Consumidores Livres", 
    subtitle = "Base 100 = Média Primeira Semana de Fev/2020"
  ) + 
  facet_wrap( ~ atividade, scales = "free_y", nrow = 4) + 
  theme(
    panel.grid.major = element_line(colour = "gray85", size = 0.3), 
    panel.grid.minor = element_line(linetype = "blank"), 
    panel.background = element_rect(fill = NA, colour = "gray45", size = 0.3, linetype = "solid"), 
    legend.position = "bottom"
  )

方案2:用guides()统一控制图例标题

如果你想更清晰地管理图例,也可以用guides()函数单独设置每个图例的标题为NULL,效果和方案1一致:

# 在你的代码末尾添加这一行即可
guides(
  col = guide_legend(title = NULL),
  size = guide_legend(title = NULL)
)

为什么原来的方法会失效?

ggplot2中,每个独立的美学映射(比如col、size)都会生成对应的图例,只有当这些图例的标题完全一致时,ggplot才会自动合并它们。你之前只修改了col的标题,size的标题还是默认的variavel,所以两个图例被分开渲染了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:37:30