如何在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
相关产品推荐
相关产品推荐

