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

如何在R中基于列联表绘制韦恩图分析站点物种分布?

在R中基于物种丰度列联表绘制韦恩图分析站点特有/共有物种

用户拥有一份物种丰度列联表,需在R中实现类似Venny2的韦恩图效果,分析S3、S5、S7、S9四个站点的特有与共有物种。原始数据如下:

species_abundance <- data.frame(
  Genus = c("Parasphingorhabdus", "Loktanella", "Cytobacillus", "Paracoccus", 
            "Paucisalibacillus", "Kytococcus", "Salinibacterium", 
            "Acinetobacter baumanni","Marinococcus","Bacillus"),
  S3 = c(0, 0, 1, 1, 0, 0, 1, 0, 4, 0),
  S5 = c(0, 0, 0, 1, 1, 0, 1, 0, 3, 5),
  S7 = c(3, 1, 0, 2, 0, 1, 0, 0, 3, 1),
  S9 = c(0, 1, 0, 3, 0, 0, 0, 1, 2, 0)
)

第一步:数据预处理

无需手动转换为species_abundance1格式,直接提取每个站点丰度>0的物种,生成列表:

# 提取各站点存在的物种(丰度>0)
site_species <- lapply(species_abundance[, -1], function(x) {
  species_abundance$Genus[x > 0]
})

方法1:使用VennDiagram包绘制传统韦恩图

该包支持精确控制韦恩图参数,可同时显示物种数量与占比,还能提取交集物种详情:

# 安装并加载包(首次使用需安装)
install.packages("VennDiagram")
library(VennDiagram)

# 绘制四组韦恩图
venn.plot <- draw.quad.venn(
  area1 = length(site_species$S3),
  area2 = length(site_species$S5),
  area3 = length(site_species$S7),
  area4 = length(site_species$S9),
  n12 = length(intersect(site_species$S3, site_species$S5)),
  n13 = length(intersect(site_species$S3, site_species$S7)),
  n14 = length(intersect(site_species$S3, site_species$S9)),
  n23 = length(intersect(site_species$S5, site_species$S7)),
  n24 = length(intersect(site_species$S5, site_species$S9)),
  n34 = length(intersect(site_species$S7, site_species$S9)),
  n123 = length(intersect(intersect(site_species$S3, site_species$S5), site_species$S7)),
  n124 = length(intersect(intersect(site_species$S3, site_species$S5), site_species$S9)),
  n134 = length(intersect(intersect(site_species$S3, site_species$S7), site_species$S9)),
  n234 = length(intersect(intersect(site_species$S5, site_species$S7), site_species$S9)),
  n1234 = length(Reduce(intersect, site_species)),
  category = names(site_species),
  fill = c("#009E73", "#E69F00", "#56B4E9", "#D55E00"),
  cat.col = c("#009E73", "#E69F00", "#56B4E9", "#D55E00"),
  cat.cex = 1.2,
  cex = 1,
  fontfamily = "sans",
  print.mode = c("raw", "percent"), # 显示物种数量与占比
  main = "不同站点物种共有/特有韦恩图"
)

# 查看所有交集的物种详情
get.venn.partitions(site_species)

方法2:使用ggVennDiagram包绘制ggplot风格韦恩图

基于ggplot2开发,样式更美观,操作更简洁,自动计算交集:

# 安装并加载包
install.packages("ggVennDiagram")
library(ggVennDiagram)
library(ggplot2)

# 绘制韦恩图
ggVennDiagram(site_species, 
              category.names = names(site_species),
              fill_color = c("#009E73", "#E69F00", "#56B4E9", "#D55E00"),
              edge_color = "black") +
  theme(plot.title = element_text(hjust = 0.5, size = 14)) +
  labs(title = "不同站点物种共有/特有韦恩图")

# 提取交集物种信息
venn_data <- process_data(site_species)
venn_data@intersections

两种方法可按需选择:VennDiagram适合需要精细控制的传统场景,ggVennDiagram适合追求美观且需整合到ggplot系列可视化的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:35:35