R-韦恩图系列-VennDiagram

R-韦恩图系列-ggVennDiagram - 简书 (jianshu.com)
R-韦恩图系列-VennDiagram - 简书 (jianshu.com)
R-韦恩图系列-UpSetR - 简书 (jianshu.com)

VennDiagram包是绘制韦恩图的一个经典包了。它不是基于ggplot体系,但可以通过转换变为ggplot对象(我更习惯些)。另外每次绘图时,但会生成一个日志log文件,比较麻烦。
参考教程:https://www.r-graph-gallery.com/14-venn-diagramm.html

  • 示例数据
# install.packages("VennDiagram")
library(VennDiagram)

genes <- paste0("gene",1:1000)
set.seed(20210302)
gene_list <- list(A = sample(genes,100),
                  B = sample(genes,200),
                  C = sample(genes,300),
                  D = sample(genes,200))
  • 简单用法:关键是设置filename参数,如果为正常名,则直接保存文件至本地;如果设置为NULL值,那么会得到gList图像,可配合grid.draw {grid}在R界面显示。但无论哪一种方法都会生成log文件。
#保存图片至本地
venn.diagram(gene_list, filename = "test.png")

#在R界面显示
venn.plot = venn.diagram(gene_list, 
                         filename = NULL)
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()

1、类别名 category name

  • 相关参数如下:
category.names, #类别名内容
cat.cex = 0.6,  #类别名字体大小(相对1)
cat.fontface = "bold", #加粗
cat.col = rainbow(3)
cat.pos = c(-27, 27, 135),   #0度为12点方向,顺时针旋转
cat.dist = c(0.055, 0.055, 0.085), #类别名距离圆的距离
cat.fontfamily = "sans", #字体
rotation.degree = 60 #旋转角度(逆时针)
rotation = 1 #适合3 set的情况
  • 演示
venn.plot = venn.diagram(gene_list[1:3], filename = NULL,
                         category.names = LETTERS[1:3],
                         cat.cex = 1.5,
                         cat.fontface = "bold",
                         cat.pos = c(-20, 20, 180),
                         cat.col = rainbow(3))
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()

2、圆的相关设置

  • 主要包括圆的填充颜色(离散),边的颜色、形状、粗细
fill  #填充颜色
col # 边的颜色
lwd = 2, #边的宽度
lty = 'blank', #边的类型 dashed dotted
  • 演示
library(RColorBrewer)
venn.plot = venn.diagram(gene_list, filename = NULL,
                         fill = brewer.pal(4, "Pastel2"),
                         col = brewer.pal(4, "Pastel2"),
                         lwd = 2, lty = "dashed")
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()

如上图,我认为VennDiagramggVennDiagram包最大的不同就在于圆的填充颜色:前者为离散的颜色,而后者为连续渐变颜色(参看上一篇笔记)

3、交集数值展示的相关设置

venn.plot = venn.diagram(gene_list,
                         cex = 2,
                         fontface = "bold", 
                         filename = NULL)
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()

4、特殊情况 2 sets

  • 如下图所示,当绘制两个set的交集情况时,圆的面积大小与对应数目成正比;
  • 而且当交集数目过小时,会自动使用引导线注释
gene_list2 <- list(A = sample(genes,20),
                  B = sample(genes,100))
venn.plot = venn.diagram(gene_list2,
                         filename = NULL)
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()
  • 可通过ext.系列参数修改这根引导线格式,例如直接取消~
# ext.text = F
# ext.percent = 0 重叠数目低于多少百分比,使用线
# ext.pos
# ext.line.lwd
venn.plot = venn.diagram(gene_list2,
                         ext.text = F,
                         filename = NULL)
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()
  • 当然,如果不想让圆的面积与数值存在这种对应关系,可通过如下方式进行绘制
venn.plot <- draw.pairwise.venn(
  area1 = 50,
  area2 = 50,
  cross.area = 20)
dev.off()

#修改展示标签内容
venn.plot[[5]]$label = length(setdiff(gene_list2[[1]], gene_list2[[2]]))
venn.plot[[6]]$label = length(setdiff(gene_list2[[2]], gene_list2[[1]]))
venn.plot[[7]]$label = length(intersect(gene_list2[[1]], gene_list2[[2]]))
grid.draw(venn.plot)
file.remove(list.files(pattern = "*log"))
dev.off()

5、转为ggplot2对象

library(ggplot2)
library(ggplotify)
library(cowplot)
as.ggplot(plot_grid(grobTree(venn.plot))) +
  ggtitle("This is title")

最后关于韦恩图的标题,venn.diagram函数的mainsub系列参数可以设置;另外由于可以转换为ggplot对象,所以之后使用ggplot title相关函数也可以~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容