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

如何在R中缩小ComplexUpset生成的EPS/SVG格式图形文件大小?

解决ComplexUpset生成的EPS/SVG体积过大问题

你的核心问题是用1000万行原始数据直接绘图,导致矢量文件嵌入了所有冗余数据点——但upset图只需要展示汇总后的交集统计,根本不需要保留原始数据。以下是几个实用的解决办法:

1. 提前计算汇总统计,用精简数据绘图

手动算出所有需要展示的交集计数、集合大小,再用这些汇总数据生成upset图,彻底砍掉冗余数据:

library(dplyr)
library(tidyr)

# 计算每个交集的计数(仅保留至少2个集合的交集)
intersection_stats <- M1_BinaryMatrix %>%
  group_by(across(everything())) %>%
  summarise(count = n(), .groups = "drop") %>%
  rowwise() %>%
  mutate(degree = sum(c_across(everything()))) %>%
  filter(degree >= 2) %>%
  ungroup() %>%
  mutate(ratio = count / nrow(M1_BinaryMatrix))

# 计算每个集合的大小
set_sizes <- M1_BinaryMatrix %>%
  summarise(across(everything(), sum)) %>%
  pivot_longer(everything(), names_to = "set", values_to = "count") %>%
  mutate(ratio = count / nrow(M1_BinaryMatrix))

# 用汇总数据生成简化版upset(可直接用ggplot2模拟upset结构,或适配ComplexUpset格式)

2. 用优化工具保存矢量图

如果不想修改绘图代码,换用更高效的矢量保存工具,自动剔除冗余元素:

  • 用svglite包保存SVG,它比默认设备更精简:
library(svglite)
svglite("upset_plot.svg", width=10, height=6)
# 插入你的upset绘图代码
dev.off()
  • 对已生成的大SVG进行压缩:用rsvg包优化
library(rsvg)
rsvg_svg(input = "large_upset.svg", output = "small_upset.svg", 
         options = "--remove-unused-defs --pretty-print")

3. 转成高分辨率位图嵌入

如果不是必须用矢量图,保存为高分辨率PNG完全能满足学术需求,体积会大幅缩小:

ggsave("upset_plot.png", plot = your_upset_plot, dpi = 300, width = 10, height = 6)

Overleaf加载PNG毫无压力,300dpi的清晰度也足够印刷或展示。

4. 调整ComplexUpset参数,避免加载全量数据

查看ComplexUpset文档,部分参数可直接传入预计算的统计值,比如手动指定set_sizes,不用让函数重新遍历全量数据:

upset(
  M1_BinaryMatrix,
  colnames(M1_BinaryMatrix),
  sort_intersections_by='ratio',
  intersections='all',
  min_degree=2,
  
  # 手动传入预计算的集合大小绘图
  set_sizes=(
    ggplot(set_sizes, aes(x = set, y = count)) +
      geom_col() +
      geom_text(aes(label=paste0(round(ratio*100), '%')), hjust=1.1, color='white') +
      expand_limits(y=1000) +
      ylab("") +
      theme(axis.text.x = element_blank())
  ),
  # 其余参数保持不变
  ...
)

这样函数不会再处理全量原始数据,生成的矢量文件自然更小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:35:50