|
维恩图:也叫文氏图,用于显示元素集合重叠区域的图示。维恩图的历史,1880年,维恩(Venn)在《论命题和推理的图表化和机械化表现》一文中首次采用固定位置的交叉环形式再加上阴影来表示逻辑问题(如图1所示),这一表示方法,不仅让逻辑学家无比激动——以致于19世纪后期、整个20世纪直到今天,还有许许多多的逻辑学家都对此潜心钻研,在大量逻辑学著作中,Venn图占据着十分重要的位置,而且,维恩图还被应用于数学学科中,尤其是被应用于集合论当中。
作了很多努力去把文氏图推广到多个集合。Venn使用椭圆达到了四个集合但从未满意他的五集合解法。在一个世纪之前找到了一种能满足Venn有关对称图的非正式标准的优雅的方法。在设计彩色玻璃窗的过程中缅怀Venn,A.W.F.Edwards提出了‘齿轮’方法:
三集合:image:Edwards-Venn-three.png
四集合:image:Edwards-Venn-four.png
五集合:image:Edwards-Venn-five.png
六集合:image:Edwards-Venn-six.png
下面是一些R包用于绘制venn图形- #安装limma包
- #source("http://www.bioconductor.org/biocLite.R")
- #biocLite("limma")
- #载入limma包
- library(limma)
- Y <- matrix(rnorm(100*6),100,6)
- Y[1:10,3:4] <- Y[1:10,3:4]+3
- Y[1:20,5:6] <- Y[1:20,5:6]+3
- design <- cbind(1,c(0,0,1,1,0,0),c(0,0,0,0,1,1))
- fit <- eBayes(lmFit(Y,design))
- results <- decideTests(fit)
- a <- vennCounts(results)
- print(a)
- vennDiagram(a)
- vennDiagram(results,include=c("up","down"),counts.col=c("red","green"))
-
复制代码
•使用gplots包
- library(gplots)
- oneName <- function() paste(sample(LETTERS,5,replace=TRUE),collapse="")
- geneNames <- replicate(1000, oneName())
-
- ##
- GroupA <- sample(geneNames, 400, replace=FALSE)
- GroupB <- sample(geneNames, 750, replace=FALSE)
- GroupC <- sample(geneNames, 250, replace=FALSE)
- GroupD <- sample(geneNames, 300, replace=FALSE)
- input <-list(GroupA,GroupB,GroupC,GroupD)
- input
-
- venn(input)
复制代码
- •使用venneuler包
- #安装venneuler包
- #install.packages("venneuler")
- #如果遇到rJava安装失败的问题,Ubuntu用户尝试可以通过以下方式解决
- #sudo apt-get install r-cran-rjava
-
- #载入venneuler包
- library(venneuler)
- vd <- venneuler(c(A=0.3, B=0.3, C=1.1, "A&B"=0.1, "A&C"=0.2, "B&C"=0.1 ,"A&B&C"=0.1))
- plot(vd)
- # same as c(A=1, `A&B&C`=1, C=1)
- m <- data.frame(elements=c("1","2","2","2","3"), sets=c("A","A","B","C","C"))
- v <- venneuler(m)
- plot(v)
- m <- as.matrix(data.frame(A=c(1.5, 0.2, 0.4, 0, 0),
- B=c(0 , 0.2, 0 , 1, 0),
- C=c(0 , 0 , 0.3, 0, 1)))
- # without weights
- v <- venneuler(m > 0)
- plot(v)
- # with weights
- v <- venneuler(m)
- plot(v)
复制代码
•使用VennDiagram包- 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
- );
- # Writing to file
- tiff(filename = "Five-set Venn diagram.tiff", compression = "lzw");
-
- grid.draw(venn.plot);
- dev.off();
复制代码
建议用后面三种方法,最多能画5 sets,limma方法最多只能画3 sets
R软件维恩图作图说明.pdf
(778.56 KB, 下载次数: 76, 售价: 1 金钱)
|
|