楼主: moonstone
23133 4

[程序分享] R绘制Venn Diagram的学习笔记 [推广有奖]

已卖:1872份资源

讲师

74%

还不是VIP/贵宾

-

威望
0
论坛币
10498 个
通用积分
369.3483
学术水平
160 点
热心指数
169 点
信用等级
124 点
经验
274586 点
帖子
237
精华
1
在线时间
520 小时
注册时间
2007-4-27
最后登录
2024-12-6

楼主
moonstone 发表于 2015-11-26 16:50:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Venn Diagram,简称文氏图,又称为维恩图,是一种非常常用的图示手段,主要用于显示组与组之间重叠的程度。比如为了验证某一基因的功能学意义,在不确定其靶基因的情况下,可以先从公用数据库中,预测出可能的靶基因。但是这种预测靶基因的数据库目前来说比较多,如何才能获得一个相对准确的靶基因?相对可靠的办法是分析比较不同数据库预测的靶基因的一致性,然后从中找出所有数据库都能预测到的靶基因作为感兴趣的基因进行功能验证。这是生物信息学分析里面一个非常普遍的思路。

三个数据集的文氏图:
Three-set Venn diagram.jpeg
四个数据集的文氏图:
Four-set Venn diagram.jpeg
五个数据集的文氏图:
Rplot.jpeg

目前基于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

  1. /# VennDiagram

  2. /# TWo-set Venn diagram

  3. # A simple two-set diagram
  4. venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"));
  5. grid.draw(venn.plot);

  6. # Same diagram as above, but without scaling
  7. grid.newpage();
  8. venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"), scaled = FALSE);
  9. grid.draw(venn.plot);

  10. # A more complicated diagram Demonstrating external area labels
  11. grid.newpage();
  12. venn.plot <- draw.pairwise.venn(
  13.   area1 = 100,
  14.   area2 = 70,
  15.   cross.area = 30,
  16.   category = c("First", "Second"),
  17.   fill = c("blue", "red"),
  18.   lty = "blank",
  19.   cex = 2,
  20.   cat.cex = 2,
  21.   cat.pos = c(285, 105),
  22.   cat.dist = 0.09,
  23.   cat.just = list(c(-1, -1), c(1, 1)),
  24.   ext.pos = 30,
  25.   ext.dist = -0.05,
  26.   ext.length = 0.85,
  27.   ext.line.lwd = 2,
  28.   ext.line.lty = "dashed"
  29. );
  30. grid.draw(venn.plot);


  31. /# Three-set Venn diagram

  32. grid.newpage();
  33. venn.plot <- draw.triple.venn(
  34.   area1 = 72,
  35.   area2 = 86,
  36.   area3 = 50,
  37.   n12 = 44,
  38.   n13 = 27,
  39.   n23 = 38,
  40.   n123 = 18,
  41.   category = c("First", "Second", "Third"),
  42.   fill = c("orange", "red", "green"),
  43.   lty = "dashed",
  44.   cex = 2,
  45.   cat.cex = 2,
  46.   cat.col = c("orange", "red", "green")
  47. );

  48. /# Four-set Venn diagram

  49. grid.newpage();
  50. venn.plot <- draw.quad.venn(
  51.   area1 = 72,
  52.   area2 = 86,
  53.   area3 = 50,
  54.   area4 = 52,
  55.   n12 = 44,
  56.   n13 = 27,
  57.   n14 = 32,
  58.   n23 = 38,
  59.   n24 = 32,
  60.   n34 = 20,
  61.   n123 = 18,
  62.   n124 = 17,
  63.   n134 = 11,
  64.   n234 = 13,
  65.   n1234 = 6,
  66.   category = c("First", "Second", "Third", "Fourth"),
  67.   fill = c("orange", "red", "green", "blue"),
  68.   lty = "dashed",
  69.   cex = 2,
  70.   cat.cex = 2,
  71.   cat.col = c("orange", "red", "green", "blue")
  72. );

  73. /# Five-set Venn diagram

  74. grid.newpage();
  75. venn.plot <- draw.quintuple.venn(
  76.   area1 = 301,
  77.   area2 = 321,
  78.   area3 = 311,
  79.   area4 = 321,
  80.   area5 = 301,
  81.   n12 = 188,
  82.   n13 = 191,
  83.   n14 = 184,
  84.   n15 = 177,
  85.   n23 = 194,
  86.   n24 = 197,
  87.   n25 = 190,
  88.   n34 = 190,
  89.   n35 = 173,
  90.   n45 = 186,
  91.   n123 = 112,
  92.   n124 = 108,
  93.   n125 = 108,
  94.   n134 = 111,
  95.   n135 = 104,
  96.   n145 = 104,
  97.   n234 = 111,
  98.   n235 = 107,
  99.   n245 = 110,
  100.   n345 = 100,
  101.   n1234 = 61,
  102.   n1235 = 60,
  103.   n1245 = 59,
  104.   n1345 = 58,
  105.   n2345 = 57,
  106.   n12345 = 31,
  107.   category = c("A", "B", "C", "D", "E"),
  108.   fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
  109.   cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
  110.   cat.cex = 2,
  111.   margin = 0.05,
  112.   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,
  113.           1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
  114.   ind = TRUE
  115. );


  116. library("multtest"); library("annaffy"); library("hgu95av2.db");library("ALL")

  117. library("genefilter")
  118. data(ALL, package = "ALL")
  119. ALLB <- ALL[,ALL$BT %in% c("B1","B2","B3","B4")]
  120. f1 <- function(x) (shapiro.test(x)$p.value > 0.05)
  121. sel1 <- genefilter(exprs(ALL[,ALLB$BT=="B1"]), filterfun(f1))
  122. sel2 <- genefilter(exprs(ALL[,ALLB$BT=="B2"]), filterfun(f1))
  123. sel3 <- genefilter(exprs(ALL[,ALLB$BT=="B3"]), filterfun(f1))
  124. sel4 <- genefilter(exprs(ALL[,ALLB$BT=="B4"]), filterfun(f1))
  125. selected <- sel1 & sel2 & sel3 & sel4

  126. library(limma)

  127. /# Three-set Venn diagram
  128. x <- matrix(as.integer(c(sel2,sel3,sel4)),ncol = 3,byrow=FALSE)
  129. colnames(x) <- c("sel2","sel3","sel4")
  130. vc <- vennCounts(x, include="both")
  131. vennDiagram(vc)

  132. /# Four-set Venn diagram
  133. x <- matrix(as.integer(c(sel1,sel2,sel3,sel4)),ncol = 4,byrow=FALSE)
  134. colnames(x) <- c("sel1","sel2","sel3","sel4")
  135. vc <- vennCounts(x, include="both")
  136. vennDiagram(vc)
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:diagram 学习笔记 venn gram RAM 数据库 信息学 如何

已有 1 人评分论坛币 收起 理由
cheetahfly + 20 精彩帖子

总评分: 论坛币 + 20   查看全部评分

本帖被以下文库推荐

沙发
cheetahfly 在职认证  发表于 2015-11-26 18:07:28
这种图很直观

藤椅
奇渥温·沙加 发表于 2015-11-28 10:34:49 来自手机
建议楼主将每条命令都做一下注解,就更直观了,可以多售几个币

板凳
咖啡喝茶 学生认证  发表于 2018-3-18 14:25:25
高手 !!!!我想知道韦恩图里的数字可以转换成百分数吗???

报纸
greenwax1 发表于 2018-3-19 20:40:17
VennDiagram 包裹中venn.diagram是不用自己整理数字的

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-1 17:23