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

如何在geom_parallel_set图中按轴隐藏特定图例项

隐藏平行集图指定轴的图例项

要隐藏平行集图中某一轴对应的所有图例条目(比如Age轴的Child/Adult、Class轴的1st/2nd/3rd/Crew等),关键是控制geom_parallel_sets_axes生成的图例——因为它的fill=y映射会把所有轴的分类值都纳入图例,我们可以通过过滤填充色的刻度来实现需求。

示例代码(以隐藏Age轴图例为例)

library(ggforce)
library(reshape2)
library(tidyr)

data <- reshape2::melt(Titanic)
data <- gather_set_data(data, 1:4)

# 定义要隐藏的图例条目(对应Age轴的分类)
hide_categories <- c("Child", "Adult")

ggplot(data, aes(x, id = id, split = y, value = value)) +
  geom_parallel_sets(aes(fill = Class), alpha = 0.3, axis.width = 0.1) +
  geom_parallel_sets_axes(aes(fill = y), axis.width = 0.1) +
  geom_parallel_sets_labels(colour = "white") +
  scale_x_discrete(limits = c("Class", "Sex", "Age", "Survived"), expand = c(0, 0)) +
  # 仅保留未被标记为隐藏的图例项
  scale_fill_discrete(breaks = setdiff(levels(data$y), hide_categories)) +
  theme(
    panel.background = element_blank(),
    axis.ticks.y = element_blank(),
    axis.text.y = element_blank(),
    axis.title.x = element_blank()
  )

按需调整

  • 隐藏Class轴图例:将hide_categories改为c("1st", "2nd", "3rd", "Crew")
  • 隐藏Sex轴图例:改为c("Male", "Female")
  • 隐藏Survived轴图例:改为c("No", "Yes")

核心逻辑是用scale_fill_discrete的breaks参数筛选出需要显示的图例条目,通过setdiff排除目标轴对应的所有分类值,从而精准隐藏指定轴的图例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:31:12