R语言中有很多程序包(package)可以做这个事情,包括limma, gplots, venneuler, 还有今天我们下面要介绍的VennDiagram包。各个工具用起来差别不是很大,可以根据个人喜好选择,不过其中limma包只能展示最多三个数据集的关系,后面三个包都可以展示超过三个数据集的维恩图。
1. 安装并加载包VennDiagram
> install.packages("VennDiagram")
> library(grid)
> library(VennDiagram)
2. 画维恩图的函数--venn.diagram()
VennDiagram包中画维恩图的函数是venn.diagram(). 下面我们来看一下venn.diagram()函数的使用及参数说明。
> venn.diagram(x, filename, height = 3000, width = 3000, resolution =
500, imagetype = "tiff", units = "px", compression =
"lzw", na = "stop", main = NULL, sub = NULL, main.pos
= c(0.5, 1.05), main.fontface = "plain",
main.fontfamily = "serif", main.col = "black",
main.cex = 1, main.just = c(0.5, 1), sub.pos = c(0.5,
1.05), sub.fontface = "plain", sub.fontfamily =
"serif", sub.col = "black", sub.cex = 1, sub.just =
c(0.5, 1), category.names = names(x), force.unique =
TRUE, print.mode = "raw", sigdigs = 3, direct.area =
FALSE, area.vector = 0, hyper.test = FALSE, total.population = NULL,
lower.tail = TRUE, ...)
部分参数说明:
x: a list of vectors, e.g: list(A=1:10, B=3:8, C=5:13)
filename: 设置图形输出文件名
resolution: 输出图形的清晰度,DPI数值
imagetype: 输出图形的格式,tiff, png, svg 等
alpha: 设置每个区块的透明度
main: 图形标题
main.fontface: 字体样式,比如斜体,粗体等
main.fontfamily: 字体,比如Time New Roman等
关于调解文字的,不仅可以针对标题调节,还有参数分别针对子标题,维恩图中每个部分(类别)的名字进行字体,大小,和字体样式的设置。
更多关于venn.diagram函数的参数说明可以查看其详细文档
venn.diagram官网: Make a Venn Diagram in VennDiagram: Generate High-Resolution Venn and Euler Plots (rdrr.io)
<meta charset="utf-8">
<article class="_2rhmJa">
sample(x, size, replace=F) # 不放回抽样
二、venn基础图
1 两个圈
venn.diagram(
x = list(set1, set2),
category.names = c("Set 1" , "Set 2 "),
filename = 'venn.png',
output=TRUE
)
image
2 三个圈
venn.diagram(
x = list(set1, set2, set3),
category.names = c("Set 1" , "Set 2 " , "Set 3"),
filename = 'venn.png',
output=TRUE
)
image
3 四个圈
venn.diagram(
x = list(set1, set2, set3, set4),
category.names = c("Set 1" , "Set 2 " , "Set 3", "Set 4"),
filename = 'venn.png',
output=TRUE
)
image
4 五个圈
venn.diagram(
x = list(set1, set2, set3, set4, set5),
category.names = c("Set 1" , "Set 2 " , "Set 3", "Set 4", "Set 5"),
filename = 'venn.png',
output=TRUE
)
image
三、个性化参数调整
#调整参数进行图形优化
venn.plot <- draw.pairwise.venn( area1 = 80, #区域1的数
area2 = 30, #区域2的数
cross.area = 2, #重叠的个数
category = c("First", "Second"),#分类命名
fill = c("blue", "red"),#1 2 区域分别的填充颜色
lty = "blank", #1 2 区域的边框线类型
cex = 2, #1 2 区域内部数字的字体大小
cat.cex = 2, # 分类名称的字体大小
cat.dist = 0.09, #分类名称距离边的距离 实际调整
cat.just = list(c(-1, -1), c(1, 1)), #分类名称的位置 ,圈内或者圈外
ext.pos = 30, #线的角度 默认是正上方12点位置
ext.dist = -0.05, #外部线的距离 跟根据圆圈的大小适当调整
ext.length = 0.85, #外部线长度
ext.line.lwd = 2, #外部线的宽度
ext.line.lty = "dashed" ) #外部线为虚线);
grid.draw(venn.plot)
library(RColorBrewer)
color <- brewer.pal(3, "Set3")
# Chart
venn.diagram(
x = list(set1, set2, set3),
category.names = c("Set 1" , "Set 2 " , "Set 3"),
filename = 'venn2.png',
output=TRUE,
# 输出
imagetype="png" , # 类型(tiff png svg)
#height = 1000 , # 高度
#width = 1000 , # 宽度
resolution = 400, # 分辨率
compression = "lzw", # 压缩算法
# 圈
lwd = 5, # 圈线条粗细 1 2 3 4 5
lty = 1, # 线条类型, 1 实线, 2 虚线, blank 无线条
fill = color, # 填充色
col = c("red", 'green', 'blue'), # 线条色
# 数字 number
cex = 2, # 数字大小
fontface = "bold", # 加粗
fontfamily = "sans", # 字体
# 标签 category
cat.cex = 2, # 字体大小
cat.col = c("red", 'green', 'blue'), # 字体色
cat.fontface = "bold", # 加粗
cat.default.pos = "outer", # 位置, outer 内 text 外
cat.pos = c(-27, 27, 135), # 位置,用圆的度数
cat.dist = c(0.055, 0.055, 0.085), # 位置,离圆的距离
cat.fontfamily = "sans", # 字体
rotation = 1 # 1 2 3 旋转确定大打头数据集
)
image
四、保存
1 绘图待保存
library(RColorBrewer)
p = venn.diagram(
x = list(set1, set2, set3, set4, set5),
category.names = c("Set 1" , "Set 2 " , "Set 3", "Set 4", "Set 5"),
# filename = 'venn.png',
filename = NULL,
output=TRUE,
fill = brewer.pal(5, "Set2"),
col = brewer.pal(5, "Set3"),
fontface = "bold",
cat.col = brewer.pal(5, "Set3"),
cat.fontface = "bold"
)
2 保存为PDF
pdf("venn-pdf.pdf")
grid.draw(p)
dev.off()
image
3 保存为PNG
png("venn-png.png")
grid.draw(p)
dev.off()
image
更多参数:
col = NA # 边框设为无色
参考:https://www.r-graph-gallery.com/14-venn-diagramm.html
venn网页工具:http://bioinformatics.psb.ugent.be/webtools/Venn/
venn.diagram函数文档: https://www.rdocumentation.org/packages/VennDiagram/versions/1.6.20/topics/venn.diagram
The R Graph Gallery绘图教程:https://www.r-graph-gallery.com/index.html
如何使用R来绘制韦恩图(Venn Diagram) - 云+社区 - 腾讯云 (tencent.com)
网友评论