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

如何在ggplot2中移除图例中的‘space’项,同时保留radiation与temperature之间的间隙

如何在ggplot2中移除图例中的‘space’项,同时保留radiation与temperature之间的间隙

嗨,我明白你的困扰啦——之前用添加space列的方式制造间隙,结果不小心让图例多了个多余的项,就算把它设为白色也没法从图例里删掉,对吧?其实不用这么绕,我们换个思路,直接通过调整柱子位置来实现间隙,同时彻底避免多余的图例项。

问题根源

你之前添加space = NA列再做pivot的方式,确实能造出视觉间隙,但space会被当成一个分类变量,必然出现在图例里,就算隐藏了柱子,图例项还是会存在。所以我们得换一种不需要额外加列的方法。

解决方案:分开绘制两组柱子

核心思路是把变量分成两组:precipitation和radiation为一组,temperature单独成一组,分别绘制这两组柱子,通过给第二组柱子设置x轴偏移量来制造间隙。这样既不会产生多余图例项,还能精准控制间隙大小。

修改后的完整代码

library(tidyverse)

# 原始数据处理(移除多余的space列)
df <- tibble(
  type=c('grass','forest','desert','crop'),
  temperature=c(0.6206,0.6132,0.6235,0.6134),
  precipitation=c(252,290,198,337),
  radiation=c(156,177,123,205)
) %>%
  mutate(temperature = temperature*100) # 放大temperature数值适配主坐标轴

ggplot() +
  # 第一组:绘制precipitation和radiation,用dodge让它们并排
  geom_col(
    data = df %>% pivot_longer(cols = c(precipitation, radiation), names_to = 'n', values_to = 'v'),
    aes(x = type, y = v, fill = n),
    position = position_dodge(width = 0.7), # 调整并排柱子的间距
    width = 0.3 # 单根柱子的宽度
  ) +
  # 第二组:绘制temperature,通过x轴偏移制造间隙
  geom_col(
    data = df %>% pivot_longer(cols = temperature, names_to = 'n', values_to = 'v'),
    aes(x = as.numeric(type) + 0.4, y = v, fill = n), # 偏移量可按需调整
    width = 0.3
  ) +
  # 设置填充颜色(对应三个目标变量,无多余项)
  scale_fill_manual(values = c("blue", "red", "purple")) +
  # 保留原有的坐标轴设置
  scale_y_continuous(
    name = "Precipitation & Radiation",
    sec.axis = sec_axis(~.*0.01, name = "Temp")
  ) +
  xlab("\nType") +
  theme_bw(14) +
  theme(
    axis.title.y = element_text(color = "grey", size=13, face="bold"),
    axis.title.y.right = element_text(color = "purple", size=13, face="bold"),
    axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)
  )

关键调整说明

  1. 移除space列:从根源上避免了多余图例项的产生
  2. 分两组绘制柱子:把需要并排的变量和需要单独分开的变量分别处理,逻辑更清晰
  3. x轴偏移量控间隙:通过as.numeric(type) + 0.4让temperature柱子向右偏移,你可以根据视觉需求调整这个数值,让间隙大小更合适
  4. 统一柱子宽度:确保两组柱子的视觉宽度一致,整体布局更协调

这样调整后,图例里就只会显示precipitation、radiation和temperature三个项,同时它们之间的间隙也完美保留下来了~

备注:内容来源于stack exchange,提问作者TarJae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:19:12