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

如何在R中自动生成多基因集的两两2×2维恩/欧拉图矩阵?

批量生成基因集两两对比的维恩/欧拉图并排版为矩阵形式

需求背景

现有一个包含多个基因集的列表(示例数据如下),已能绘制单个两两组合的维恩/欧拉图,需要自动化生成所有基因集两两组合的2×2维恩/欧拉图,并将这些图整理为矩阵形式,实际场景中涉及70+个基因集的对比。

示例数据生成

首先生成示例基因集列表:

genes <- paste("gene", 1:1000, sep = "")
x <- list(A = sample(genes, 300), 
          B = sample(genes, 525), 
          C = sample(genes, 440),
          D = sample(genes, 350))

批量绘图与矩阵排版方案

使用eulerr包生成欧拉图,结合gridExtra包实现矩阵式排版,代码如下:

1. 加载依赖包

library(eulerr)
library(gridExtra)

2. 批量生成并排版所有两两对比图

# 获取基因集名称与数量
gene_names <- names(x)
n <- length(gene_names)

# 初始化空的图矩阵,用于存储每个位置的图对象
plot_matrix <- matrix(list(), nrow = n, ncol = n)

# 循环生成所有组合的图
for (i in 1:n) {
  for (j in 1:n) {
    if (i == j) {
      # 对角线位置绘制单个基因集的欧拉图
      p <- plot(euler(x[i]), quantities = TRUE, main = gene_names[i])
    } else {
      # 非对角线位置绘制两两基因集的对比欧拉图
      p <- plot(euler(x[c(i, j)]), quantities = TRUE, main = paste(gene_names[i], "vs", gene_names[j]))
    }
    plot_matrix[i, j] <- list(p)
  }
}

# 将图矩阵拼接为一张大网格图
grid.arrange(grobs = unlist(plot_matrix), nrow = n)

70+基因集场景的优化建议

当基因集数量达到70+时,直接生成70×70的矩阵图会导致单图尺寸极小,难以查看,可通过以下方式优化:

  • 仅保留三角区域:只生成上三角或下三角的对比图(对角线可保留单基因集图或省略),减少冗余绘图
  • 分批次生成:将基因集分组,生成多个子矩阵图而非一张大图
  • 调整输出尺寸:保存图片时设置超大的宽高与高分辨率,例如:
ggsave("gene_set_comparison_matrix.png", 
       grid.arrange(grobs = unlist(plot_matrix), nrow = n),
       width = 120, height = 120, dpi = 300)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:05:20