Venn图的各种绘制方法----在线工具&R语言自动处理数据并绘图
Venn图
重要的事要先说,关注公众号“红皇后学术”,后台回复“Venn”获取本文介绍在线工具的网址以及R语言绘图示例文件和完整代码。
Venn图通常用来展示不同样本间OTU的共有情况,在图中通常用一个圆形或椭圆形代表一个样本或一组样品,圆形的交叉位置代表不同样本间共有,重叠区域的数字表示对应的多个样本之间的共有的OTUs个数,未重叠区域表示各样本特有的OTUs,可以对2-5个(组)样本进行分析。
VENNY
VENNY是一个在线的Venn图绘制工具,进入网站后,页面如下方所示,可以进行2-4个(组)样本的Venn分析。
在左侧的List中填入响应的数据并更改List的名称即可,数据为该样本中检出的OTU的名称,每一个OTU单独一行。
具体的数据处理方式为,使用excel打开QIIME分析得到的OTU表格,选择样本列,按照从大到小排序,之后选择检出数目大于1的OTU名称,复制粘贴到响应的List位置即可。
填入数据后,右侧即时显示生成的图像。
可以在图像上方的工具栏对图像参数进行修改。
点击图像中不同位置的数值,在左侧的Results一栏中就可以显示属于该区域的OTU名称。
鼠标右键点击图片,选择另存为图片,即可保存绘制结果。
JVenn
JVenn同样是绘制Venn图的在线工具,与VENNY的不同之处是,JVenn最多支持同时分析6个(组)样本,并且可以修改样本对应的颜色和进行简单的统计。
进入JVenn的网页后,在右下方的List列表中输入响应的绘图文件,文件制作方法与VENNY一致,修改List的名称及其颜色。
在右侧就会实时显示绘制的图形。
在左侧上方的的Venn global configuration中可以修改图形参数。
通常情况下Venn图使用Classic模式展示,有时也是用Edwarkds模式,结果如下。
JVenn支持对特定样本的突出显示,只需在其图像右下角对应的标签中,选择on即可。
与VENNY一样,点击图像中的数字,即可在下方显示该数据所包含的OTU信息。
对于6个样本,JVenn使用多边形表示不同的样本,而对于5个及一下样本,则使用常规的椭圆形或圆形展示。
点击图片右上方的按钮,即可将绘制的结果保存到本地。
R语言“VennDiagram”包
除了使用在线工具之外,通常还使用R语言的“VennDiagram”包进行Venn图的绘制。
还是先介绍一个该包的图形参数。
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, ...)
各参数意义:
X为绘制Venn图所需的数据向量list;
fielname为输出图像的名字;
height和width均为整数,规定输出图像的高和宽;
resolution规定数据图像的DPI分辨率;
imagetype规定输出图像的格式包括tiff、png和svg;
units为图像大小的单位;
compression为tiff图像应用的表达算法
na规定缺失的数值的处理方法包括none、stop和remove;
main为图像的标题;
sub为图像的副标题;
main.pos规定标题的位置;
main.fontface规定标题字体样式;
main.fontfamily规定标题字体的类型;
main.col规定标题字体的颜色;
main.cex为标题字体的大小;
main.just规定标题水平和垂体方向的对齐方式;
所有sub的意义与main一样,只不过换成了副标题;
category.names定义venn图中不同圆圈的名称;
force.unique规定是否只应用输入数据中的unique元素进行绘图还是应用所有元素;
print.mod规定不同区域中数字的显示形式包括raw和percent;
除了这些参数之外,VennDiagram还包含一些通用的图形参数,例如lwd调整线宽、lty调整线型、col调整颜色等等,具体可以使用“?venn.diagram”查看帮助文档 (要先载入包啊!!)。
VennDiagram绘制Venn需要一个list文件,相当于把在线分析工具的各样本数据合并到一个list文件中,可以在excel中手动制作绘图所需的文件,之后载入R中即可。
但是如果这样为啥还要用R画图呢,直接用在线工具不就好了😂😂!!!
这里隆重给大家带来使用R语言从OTU表格直接生成Venn绘图数据的完整代码!!!
示例中为4个样本的数据进行分析。
data <- read.table("otu_table.txt",header = TRUE,row.names = 1,sep = "\t")
data <- ifelse(data > 0, rownames(data),NA)
data <- as.data.frame(data)
df <- list()
for(i in 1:length(data)){
a <- na.omit(data[,i])
df <- c(df,list(a))
}
names(df) <- colnames(data)
之后直接进行图像的绘制。
ibrary(VennDiagram)
library(RColorBrewer)
venn.diagram(df,filename = "venn.png",height = 5400,width = 5400,
resolution = 600,imagetype = "png",units = "px",
lwd = 2,lty = 1,fill = brewer.pal(length(data),"Set2"),cex = 1.3,
cat.cex = 2,alpha = 0.8,margin = 0.05,fontface = 2,
cat.fontface = 2, print.mode = c("raw","percent"))
你以为这样就结束了么,上边的代码只是处理单个样本的,但由于Venn图分析样本数目的限制,很多时候我们都是需要绘制不同组样本间的Venn图。
下面的代码连带分组数据的处理一步完成,示例数据共15个样本,分为3组,使用下方代码的前提是将样本的排序按照分组排列,并参考示例建立一个分组文件。
data.g <- read.table("otu_table_group.txt",header = TRUE,row.names = 1,sep = "\t")
group <- read.table("group.txt",header = FALSE,sep = "\t")
library(dplyr)
g<-unique(group$V2)
Gnum<-length(g)
number <- group %>% group_by(V2) %>% count(V2)
gf <- c()
k <- 1
for(i in 1:(Gnum)){
gf[k] <- sum(number[1:i,2])
k <- k+1
}
dg <- rownames(data.g)
k <- 1
for (i in 1:(Gnum)) {
a <- as.data.frame(apply(data.g[,c(k:gf[i])],1,sum))
dg <- cbind(dg,a)
k <- gf[i] +1
}
dg <- dg[,-1]
colnames(dg) <- g
dg <- ifelse(dg > 0, rownames(dg),NA)
dg <- as.data.frame(dg)
df <- list()
for(i in 1:length(dg)){
a <- na.omit(dg[,i])
df <- c(df,list(a))
}
names(df) <- colnames(dg)
venn.diagram(df,filename = "venn_g.png",height = 5400,width = 5400,
resolution = 600,imagetype = "png",units = "px",
lwd = 2,lty = 1,fill = brewer.pal(length(dg),"Set2"),cex = 1.3,
cat.cex = 2,alpha = 0.8,margin = 0.05,fontface = 2,
cat.fontface = 2, print.mode = c("raw","percent"))
关注公众号“红皇后学术”,后台回复“Venn”获取本文介绍在线工具的网址以及R语言绘图示例文件和完整代码。