R语言VennDiagram包绘制韦恩图实战:从参数配置到多集合可视化
在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绘制韦恩图的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













