三个数据集的文氏图:
四个数据集的文氏图:
五个数据集的文氏图:
目前基于R绘制Venn Diagram(简称文氏图)的程序有四种:
1、 limma::vennDiagram
2、 gplots::venn
3、 venneuler
4、 VennDiagram
四种方法中第一和第四种方法相对比较常用。
另外,绘制文氏图需要特别注意以下几点:
1、 limma::vennDiagram及gplots::venn不能绘制彩色的文氏图,而VennDiagram绘制的文氏图相对更为美观。
2、 gplots::venn及VennDiagram绘制的文氏图是基于列表数据的,也即是必须先知道不同数据集的各自交叉子集数才能绘制文氏图。而limma::vennDiagram却是基于R对象的,这在不知道具体不同数据集的交叉子集数的情况下,也即探索不同数据集的交叉子集时,有着明显优势。
3、 由于limma (全称:Linear Models for Microarray Data)是Bioconductor中用于分析微阵列数据的非常重要及常用的程序包。因此,对于生物信息学研究者来说,采用limma::vennDiagram绘制文氏图更为多见。但是为了更加美观的文氏图,可以通过limma::vennDiagram先得到不同数据集的交叉子集数,然后采用VennDiagram绘制更加美观的彩色文氏图。
附件中分别介绍了如何采用VennDiagram及limma::vennDiagram绘制文氏图的效果及相应的R编码。需要说明的是:由于VennDiagram绘制文氏图是基于已知的交叉子集数下绘制,但是在生物统计分析中,通常并不知道不同数据集的交叉子集数。所以最后采用实例分析如何采用limma::vennDiagram来绘制不清楚交叉子集数情况下的文氏图。
附件下载网址:http://yunpan.cn/cLhiA3x5csU4J 访问密码 b8b1
- /# VennDiagram
- /# TWo-set Venn diagram
- # A simple two-set diagram
- venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"));
- grid.draw(venn.plot);
- # Same diagram as above, but without scaling
- grid.newpage();
- venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"), scaled = FALSE);
- grid.draw(venn.plot);
- # A more complicated diagram Demonstrating external area labels
- grid.newpage();
- venn.plot <- draw.pairwise.venn(
- area1 = 100,
- area2 = 70,
- cross.area = 30,
- category = c("First", "Second"),
- fill = c("blue", "red"),
- lty = "blank",
- cex = 2,
- cat.cex = 2,
- cat.pos = c(285, 105),
- 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);
- /# Three-set Venn diagram
- grid.newpage();
- venn.plot <- draw.triple.venn(
- area1 = 72,
- area2 = 86,
- area3 = 50,
- n12 = 44,
- n13 = 27,
- n23 = 38,
- n123 = 18,
- category = c("First", "Second", "Third"),
- fill = c("orange", "red", "green"),
- lty = "dashed",
- cex = 2,
- cat.cex = 2,
- cat.col = c("orange", "red", "green")
- );
- /# Four-set Venn diagram
- grid.newpage();
- venn.plot <- draw.quad.venn(
- area1 = 72,
- area2 = 86,
- area3 = 50,
- area4 = 52,
- n12 = 44,
- n13 = 27,
- n14 = 32,
- n23 = 38,
- n24 = 32,
- n34 = 20,
- n123 = 18,
- n124 = 17,
- n134 = 11,
- n234 = 13,
- n1234 = 6,
- category = c("First", "Second", "Third", "Fourth"),
- fill = c("orange", "red", "green", "blue"),
- lty = "dashed",
- cex = 2,
- cat.cex = 2,
- cat.col = c("orange", "red", "green", "blue")
- );
- /# Five-set Venn diagram
- grid.newpage();
- venn.plot <- draw.quintuple.venn(
- area1 = 301,
- area2 = 321,
- area3 = 311,
- area4 = 321,
- area5 = 301,
- n12 = 188,
- n13 = 191,
- n14 = 184,
- n15 = 177,
- n23 = 194,
- n24 = 197,
- n25 = 190,
- n34 = 190,
- n35 = 173,
- n45 = 186,
- n123 = 112,
- n124 = 108,
- n125 = 108,
- n134 = 111,
- n135 = 104,
- n145 = 104,
- n234 = 111,
- n235 = 107,
- n245 = 110,
- n345 = 100,
- n1234 = 61,
- n1235 = 60,
- n1245 = 59,
- n1345 = 58,
- n2345 = 57,
- n12345 = 31,
- category = c("A", "B", "C", "D", "E"),
- fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
- cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
- cat.cex = 2,
- margin = 0.05,
- cex = c(1.5, 1.5, 1.5, 1.5, 1.5, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8,
- 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
- ind = TRUE
- );
- library("multtest"); library("annaffy"); library("hgu95av2.db");library("ALL")
- library("genefilter")
- data(ALL, package = "ALL")
- ALLB <- ALL[,ALL$BT %in% c("B1","B2","B3","B4")]
- f1 <- function(x) (shapiro.test(x)$p.value > 0.05)
- sel1 <- genefilter(exprs(ALL[,ALLB$BT=="B1"]), filterfun(f1))
- sel2 <- genefilter(exprs(ALL[,ALLB$BT=="B2"]), filterfun(f1))
- sel3 <- genefilter(exprs(ALL[,ALLB$BT=="B3"]), filterfun(f1))
- sel4 <- genefilter(exprs(ALL[,ALLB$BT=="B4"]), filterfun(f1))
- selected <- sel1 & sel2 & sel3 & sel4
- library(limma)
- /# Three-set Venn diagram
- x <- matrix(as.integer(c(sel2,sel3,sel4)),ncol = 3,byrow=FALSE)
- colnames(x) <- c("sel2","sel3","sel4")
- vc <- vennCounts(x, include="both")
- vennDiagram(vc)
- /# Four-set Venn diagram
- x <- matrix(as.integer(c(sel1,sel2,sel3,sel4)),ncol = 4,byrow=FALSE)
- colnames(x) <- c("sel1","sel2","sel3","sel4")
- vc <- vennCounts(x, include="both")
- vennDiagram(vc)


雷达卡





京公网安备 11010802022788号







