找回密码
 注册
查看: 18895|回复: 15

R语言 画图-维恩图-venn

[复制链接]
发表于 2013-4-9 17:00:34 | 显示全部楼层 |阅读模式
维恩图:也叫文氏图,用于显示元素集合重叠区域的图示。维恩图的历史,1880年,维恩(Venn)在《论命题和推理的图表化和机械化表现》一文中首次采用固定位置的交叉环形式再加上阴影来表示逻辑问题(如图1所示),这一表示方法,不仅让逻辑学家无比激动——以致于19世纪后期、整个20世纪直到今天,还有许许多多的逻辑学家都对此潜心钻研,在大量逻辑学著作中,Venn图占据着十分重要的位置,而且,维恩图还被应用于数学学科中,尤其是被应用于集合论当中。
venn.jpg


作了很多努力去把文氏图推广到多个集合。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图形
  1. #安装limma包
  2. #source("http://www.bioconductor.org/biocLite.R")
  3. #biocLite("limma")

  4. #载入limma包
  5. library(limma)
  6. Y <- matrix(rnorm(100*6),100,6)
  7.      Y[1:10,3:4] <- Y[1:10,3:4]+3
  8.      Y[1:20,5:6] <- Y[1:20,5:6]+3
  9.      design <- cbind(1,c(0,0,1,1,0,0),c(0,0,0,0,1,1))
  10.      fit <- eBayes(lmFit(Y,design))
  11.      results <- decideTests(fit)
  12.      a <- vennCounts(results)
  13.      print(a)
  14.      vennDiagram(a)
  15.      vennDiagram(results,include=c("up","down"),counts.col=c("red","green"))
  16.      
复制代码
venn-limma.png

&#8226;使用gplots包

  1. library(gplots)
  2. oneName <- function() paste(sample(LETTERS,5,replace=TRUE),collapse="")
  3.      geneNames <- replicate(1000, oneName())
  4.                            
  5.      ##
  6.      GroupA <- sample(geneNames, 400, replace=FALSE)
  7.      GroupB <- sample(geneNames, 750, replace=FALSE)
  8.      GroupC <- sample(geneNames, 250, replace=FALSE)
  9.      GroupD <- sample(geneNames, 300, replace=FALSE)
  10.      input  <-list(GroupA,GroupB,GroupC,GroupD)
  11.      input
  12.      
  13.      venn(input)
复制代码
ven-gplot.png
  1. &#8226;使用venneuler包

  2. #安装venneuler包
  3. #install.packages("venneuler")
  4. #如果遇到rJava安装失败的问题,Ubuntu用户尝试可以通过以下方式解决
  5. #sudo apt-get install r-cran-rjava

  6. #载入venneuler包
  7. library(venneuler)


  8. 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))
  9. plot(vd)
  10. # same as c(A=1, `A&B&C`=1, C=1)
  11. m <- data.frame(elements=c("1","2","2","2","3"), sets=c("A","A","B","C","C"))
  12. v <- venneuler(m)
  13. plot(v)
  14. m <- as.matrix(data.frame(A=c(1.5, 0.2, 0.4, 0, 0),
  15.                           B=c(0  , 0.2, 0  , 1, 0),
  16.                           C=c(0  , 0  , 0.3, 0, 1)))
  17. # without weights
  18. v <- venneuler(m > 0)
  19. plot(v)
  20. # with weights
  21. v <- venneuler(m)
  22. plot(v)

复制代码
venneuler.png


&#8226;使用VennDiagram包
  1. venn.plot <- draw.quintuple.venn(
  2.         area1 = 301,
  3.         area2 = 321,
  4.         area3 = 311,
  5.         area4 = 321,
  6.         area5 = 301,
  7.         n12 = 188,
  8.         n13 = 191,
  9.         n14 = 184,
  10.         n15 = 177,
  11.         n23 = 194,
  12.         n24 = 197,
  13.         n25 = 190,
  14.         n34 = 190,
  15.         n35 = 173,
  16.         n45 = 186,
  17.         n123 = 112,
  18.         n124 = 108,
  19.         n125 = 108,
  20.         n134 = 111,
  21.         n135 = 104,
  22.         n145 = 104,
  23.         n234 = 111,
  24.         n235 = 107,
  25.         n245 = 110,
  26.         n345 = 100,
  27.         n1234 = 61,
  28.         n1235 = 60,
  29.         n1245 = 59,
  30.         n1345 = 58,
  31.         n2345 = 57,
  32.         n12345 = 31,
  33.         category = c("A", "B", "C", "D", "E"),
  34.         fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
  35.         cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
  36.         cat.cex = 2,
  37.         margin = 0.05,
  38.         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),
  39.         ind = TRUE
  40.         );

  41. # Writing to file
  42. tiff(filename = "Five-set Venn diagram.tiff", compression = "lzw");
  43.        
  44. grid.draw(venn.plot);

  45. dev.off();
复制代码
VennDiagram.png

建议用后面三种方法,最多能画5 sets,limma方法最多只能画3 sets

R软件维恩图作图说明.pdf (778.56 KB, 下载次数: 76, 售价: 1 金钱)

回复

使用道具 举报

发表于 2013-4-15 16:55:24 | 显示全部楼层
{:soso_e183:}学习+练习,还在学习ing,很多统计的东西还需要学习,努力
回复 支持 反对

使用道具 举报

发表于 2013-5-22 09:38:28 | 显示全部楼层
学习了!{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2014-5-30 17:25:10 | 显示全部楼层
好东西么,学习的
回复 支持 反对

使用道具 举报

发表于 2014-6-24 17:14:52 | 显示全部楼层
学习了!{:soso_e179:}{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2014-6-24 21:11:46 | 显示全部楼层
不错的内容。
回复 支持 反对

使用道具 举报

发表于 2014-7-15 03:06:19 | 显示全部楼层
{:soso_e179:}{:soso_e179:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2025-6-18 01:21 , Processed in 0.061885 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表