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

如何在ggupset中显示未观测集合?含示例与尝试方案

在ggupset中显示未观测集合并调整标签顺序

要实现显示未观测的集合B,同时让标签按A、B、C的顺序排列,需要先将目标列转换为包含所有预期集合的因子,再配合scale_x_upset的参数设置,具体步骤如下:

解决方案代码

library(ggplot2)
library(ggupset)
library(tibble)

df <- data.frame(x = I(list(c("A", "C"),
                            "A",
                            "C")))

# 将x转换为因子,指定所有需要的集合作为水平(包括未观测的B)
df$x <- factor(df$x, levels = I(list("A", "B", "C", c("A", "C"))))

# 绘图,指定sets参数控制集合标签顺序
df %>% 
  ggplot(aes(x = x)) + 
  geom_bar(stat = 'count') + 
  scale_x_upset(sets = c("A", "B", "C"))

原理说明

  • 直接使用scale_x_upset(sets = ...)不会自动添加未观测的集合,必须先将x列转换为包含所有目标集合的因子,确保未观测的集合(如B)被纳入因子水平中。
  • 因子水平的顺序决定了x轴上集合的显示顺序,配合scale_x_upset(sets = c("A", "B", "C"))就能让顶部的集合标签按预期顺序排列。
  • 转换为因子后,未观测的集合会显示计数为0的柱子,若想隐藏0值柱子但保留标签,可过滤掉对应行后再绘图,但需确保因子水平仍包含该集合。

补充:隐藏0值柱子但保留标签

如果不需要显示B的0值柱子,只保留顶部的标签,可调整如下:

df %>% 
  filter(x != list("B")) %>% 
  ggplot(aes(x = x)) + 
  geom_bar(stat = 'count') + 
  scale_x_upset(sets = c("A", "B", "C"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:10:36