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

如何移除UpSet图的Set Size子图并在柱状图顶部添加百分比标注

解决UpSetR绘图的两个需求:移除Set Size子图 + 添加百分比标注

1. 移除Set Size子图

直接在upset()函数中设置参数set_size.show = FALSE即可,该参数控制是否显示左侧的Set Size子图。同时可通过text.scale参数调整文本大小,适配去掉子图后的布局,保证图表可读性。

2. 添加观测数+百分比标注

需要先计算每个交集的统计数据,再通过queries参数将标注添加到对应柱状图顶部:

  • 转换集合数据为UpSet格式矩阵,统计每个交集的元素数量
  • 计算所有出现在至少一个集合中的去重元素总数,以此为基数计算每个交集的百分比
  • 构造包含观测数和百分比的标注文本,循环添加到每个交集柱状图顶部

完整代码如下:

require(tidyverse)
require(UpSetR)

# 加载数据并构造集合列表
temp_movies  <- ggplot2movies::movies
to_UpSet <- list( 
  Action = filter(temp_movies, Action == 1)$title,
  Comedy = filter(temp_movies, Comedy == 1)$title,
  Drama = filter(temp_movies, Drama == 1)$title,
  Romance = filter(temp_movies, Romance == 1)$title
)

# 转换为UpSet数据格式并计算交集统计
upset_data <- fromList(to_UpSet)
freq_table <- upset_data %>% 
  mutate(across(everything(), as.factor)) %>% 
  count(Action, Comedy, Drama, Romance, name = "count") %>% 
  filter(count > 0)

# 计算总元素数(去重后的所有集合元素)
total_elements <- length(unique(unlist(to_UpSet)))
# 生成标注文本:观测数 + 百分比
freq_table <- freq_table %>% 
  mutate(percent = round((count / total_elements) * 100, 1),
         label = str_glue("{count}\n({percent}%)")) %>% 
  arrange(desc(count)) # 按频率排序,匹配UpSet默认排序

# 绘制最终图表
upset(upset_data, 
      order.by = "freq",
      set_size.show = FALSE, # 移除Set Size子图
      mainbar.y.label = "交集元素数量",
      sets.x.label = "电影类型",
      text.scale = c(1.2, 1.2, 1, 1, 1.2, 1), # 调整各部分文本大小
      # 添加自定义标注
      queries = lapply(1:nrow(freq_table), function(i) {
        # 获取当前交集对应的集合名称
        current_sets <- colnames(upset_data)[which(c(freq_table$Action[i], freq_table$Comedy[i], freq_table$Drama[i], freq_table$Romance[i]) == 1)]
        list(
          query = intersects,
          params = list(current_sets),
          color = "black",
          text = freq_table$label[i],
          type = "text",
          location = "top"
        )
      })
)

说明

  • 百分比计算基于所有出现在至少一个集合中的去重元素总数,符合维恩图的常规百分比展示逻辑
  • queries参数通过循环为每个交集生成文本标注,location = "top"确保标注显示在柱状图顶部
  • 调整text.scale参数可根据需求修改图表各部分文本大小,提升报告可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:13:18