如何在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
相关产品推荐
相关产品推荐

