R语言VennDiagram包绘制韦恩图实战:从参数配置到多集合可视化

云舒
云舒
发布时间:2026-10-15 | 4人浏览过
原创

在R语言数据分析中,直观展示多个数据集间的交集与并集关系至关重要。本文将详细介绍如何使用 VennDiagram 包绘制从两个到五个集合的韦恩图,并提供关于区域命名、颜色配置及面积缩放的具体操作指南。

准备工作与环境配置

首先,需要安装并加载绘图所需的R包。若尚未安装 VennDiagram,可使用以下命令完成安装,同时确保已加载绘图底层的 grid 包:

install.packages("VennDiagram")
library(grid)
library(VennDiagram)

基础韦恩图绘制与核心参数解析

VennDiagram 提供了灵活的函数来绘制不同数量的韦恩图。在开始复杂定制前,理解核心函数的参数结构是关键。该包支持通过数字直接指定区域大小,也支持传入数据列表自动生成。

以下是常用参数的说明,下文将结合具体案例演示其应用:

  • area1, area2...:定义各个圆圈的基数(样本量)。
  • category:设置每个圆圈的名称(标签)。
  • fill:指定各个区域的填充颜色。
  • cex, cat.cex:分别控制区域内数字和分类名称的字体大小。
  • cat.dist, cat.pos:调整标签相对于圆圈边缘的距离和位置(如内/外)。

第1步:绘制两个已知数据的韦恩图

针对两组数据,可以使用 draw.pairwise.venn 函数。默认情况下,圆圈面积是固定的,不随数据量变化;若需真实反映比例,可设置 scaled = TRUE。

以下是基础代码示例,定义了两个区域的大小及名称:

# 圆的大小不会根据数据量多少改变
venn.plot <- draw.pairwise.venn(
  area1 = 80, 
  area2 = 30, 
  cross.area = 10, 
  c("First", "Second"), 
  scaled = FALSE
)
grid.draw(venn.plot)

若希望圆圈大小与实际数值成比例,只需将 scaled 设为 TRUE(注意此时需重新计算各区域数值以保证几何合理性)。此外,还可以通过调整边框线类型 lty、外部引导线 ext.line.lwd 等细节来优化图形美观度。

第2步:自定义美化两集合韦恩图

通过精细化参数配置,可以生成适合发表或报告的专业图表。以下示例展示了如何修改区域颜色、字体大小、标签距离及外部线条样式:

venn.plot <- draw.pairwise.venn(
  area1 = 80,       # 区域1数值
  area2 = 30,       # 区域2数值
  cross.area = 2,   # 交叉部分数值
  category = c("First", "Second"), # 分类命名
  fill = c("blue", "red"),         # 填充颜色
  lty = "blank",    # 移除边框线
  cex = 2,          # 内部数字字体大小
  cat.cex = 2,      # 分类名称字体大小
  cat.dist = 0.09,  # 分类名距边缘距离
  cat.just = list(c(-1, -1), c(1, 1)), # 标签位置调整
  ext.pos = 30,     # 引导线角度
  ext.dist = -0.05, # 外部线距离
  ext.length = 0.85,# 引导线长度
  ext.line.lwd = 2, # 引导线宽度
  ext.line.lty = "dashed" # 引导线样式
)
grid.draw(venn.plot)

三至五集合韦恩图的进阶绘制

随着集合数量增加,维恩图的逻辑结构变得更加复杂。VennDiagram 通过不同的函数来处理三集合和三以上集合的情况。

第3步:绘制三个数据集合的韦恩图

对于三组数据,使用 draw.triple.venn 函数。除了各自的基数 (area1-3),还需要指定两两交集 (n12, n23, n13) 以及三者共同交集 (n123) 的数值。

venn.plot <- draw.triple.venn(
  area1 = 80, area2 = 70, area3 = 50,
  n12 = 38, n23 = 18, n13 = 28, n123 = 8,
  category = c("First", "Second", "Third"),
  fill = c("blue", "red", "green"),
  lty = "blank", cex = 2, cat.cex = 2,
  cat.col = c("blue", "red", "green")
)
grid.draw(venn.plot)

第4步:处理四个及以上数据集合

当集合数量达到四个或更多时,建议使用通用的 venn.diagram 函数,它可以直接接受数据列表作为输入,自动计算交集,并支持直接导出为高清图像文件。

四个集合示例:

该方法优势在于可以直接输出为 .tiff 或 .png 文件,方便直接使用。通过 x 参数传入包含四个向量的列表,利用 alpha 控制透明度以避免视觉混乱,并使用长字符串数组精确控制每个细分区域的标签颜色。

# 模拟数据
A <- sample(1:1000, 500, replace = FALSE)
B <- sample(1:1000, 600, replace = FALSE)
C <- sample(1:1000, 700, replace = FALSE)
D <- sample(1:1000, 800, replace = FALSE)

venn.diagram(
  x = list(A = A, B = B, C = C, D = D),
  filename = "Venn_4set.tiff",
  col = "transparent",
  fill = c("blue", "green", "yellow", "grey50"),
  alpha = 0.50,                     # 设置半透明以区分重叠区
  label.col = c("orange", "white", "grey50", "white","white", "white", "white", "white", "darkblue", "white","white", "white", "white", "darkgreen", "white"),
  cex = 1.2,
  cat.col = c("darkblue", "darkgreen", "orange", "grey50"),
  cat.cex = 1.2,
  margin = 0.2
)

五个集合示例:

继续增加至五个集合,VennDiagram 仍能提供支持,但随着数量增加,图形的可读性会显著下降。

E <- sample(1:1000, 900, replace = FALSE)
venn.diagram(
  x = list(A = A, B = B, C = C, D = D, E = E),
  filename = "Venn_5set.tiff",
  col = "black",
  fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
  alpha = 0.50,
  cat.col = c("darkblue", "darkgreen", "orange", "grey50","purple"),
  cat.cex = 1.5,
  cat.fontface = "bold",
  margin = 0.05
)

总结与注意事项

VennDiagram 包最大仅支持绘制五个数据集合的韦恩图。如图所示,当超过四个集合时,图形内部的区块划分变得异常细碎且难以辨认,不再适合作为主要展示手段。对于六个及以上的大规模集合重叠分析,建议改用 UpSetR 或相关工具进行可视化。

以上就是R语言VennDiagram包绘制韦恩图示例的详细内容,更多关于R语言VennDiagram绘制韦恩图的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表