一文学会利用R包绘制多种韦恩图得方法
大家好,我是阿琛。经过前面几期的内容学习,我们学习了简单的数据清洗方法,用简单易懂的内容,带领大家快速入门数据处理。回顾一下,我们首先学习了tidyverse包中的核心包dplyr包,分别介绍了其中的5大函数及其联合使用方法,分别是filter()函数,arrange()函数,select()函数,mutate()函数,以及summarize()函数。随后,基于stringr包,我们进一步介绍了正则表达式的基础语法。如果大家有不熟悉的地方,建议大家回去重新学习一下,毕竟万丈高楼平地起,基础的学习还是十分重要的。
接下来,今天带给大家的是可视化专题。韦恩图是用来展示多个不同数据集之间交集和差异的一种可视化方法。而且,不管是生信分析,还是基础相关研究,韦恩图都是一种简便而又常见的展示方法。目前,除了在线网站工具绘制方法外,在R语言中常用的包括VennDiagram包,ggvenn包,ggVennDiagram包等方式。
下面,我们一起来看一下如何使用这几种方式分别来绘制韦恩图。
1.基于VennDiagram包绘制韦恩图
1.1 安装和加载R包
install.packages("VennDiagram")library(grid)library(VennDiagram) #加载R包
1.2 绘制韦恩图
关于VennDiagram包的使用,可以分成两种使用情况;其中,第一种情况是已知各个数据集的个数以及重叠的个数,第二种是已知每个数据集内的内容。
1.2.1 已知各个数据集的个数以及重叠的个数
如果已知数据集A(setA)包含100个数据量,数据集B(setB)包含50个数据量,其中重叠的数量为20个,随后使用draw.pairwise.venn()函数进行绘图,draw.pairwise.venn()函数主要用于两个数据集的韦恩图:
venn.plot <-draw.pairwise.venn(area1 = 100,area2 = 50,cross.area = 20,category = c("set_A", "set_B"),scaled =FALSE)grid.draw(venn.plot)
得到如下所示的结果:
下面我们对这个结果图进一步进行美化:
#对韦恩图进行美化venn.plot <- draw.pairwise.venn(area1 = 100, #数据集1的数 area2 = 50, #数据集2的数 cross.area = 20, #重叠的个数 category = c("First", "Second"), #分类命名 fill = c("blue", "red"), #两个区域分别的填充颜色 lty = "blank", #两个区域的边框线类型 cex = 2, #两个区域内部数字的字体大小 cat.cex = 2, # 分类名称的字体大小 cat.dist = 0.09, #分类名称距离边的距离 实际调整 cat.just = list(c(-1, -1), c(1, 1))) #分类名称的位置,圈内或者圈外grid.draw(venn.plot)
美化后,结果如图所示:
1.2.2 已知各个数据集的内容绘制韦恩图
set.seed(123)A <- sample(1:100, 50, replace = FALSE)B <- sample(1:100, 60, replace = FALSE)C <- sample(1:100, 70, replace = FALSE)D <- sample(1:100, 80, replace = FALSE)
在绘图之前,我们先使用sample()函数从1到100中随机选取一定数量的数据,来形成四个不同的数据集,以进行后续的韦恩图绘制。
接着,我们来使用venn.diagram()函数来绘制四维数据的韦恩图。
venn.plot <- venn.diagram(x = list(A = A,B = B,C = C,D = D), filename = "4quadruple_Venn.tiff", #文件名称 col = "black", lty = "blank", #边框线型改为"dotted"虚线 lwd = 3, # 边框线的宽度 fill = c("blue", "green", "yellow", "grey50"), #填充颜色 alpha = 0.50, #透明度 label.col = c("orange", "white", "darkorchid4", "white", "white", "white","white", "white", "darkblue", "white","white", "white", "white", "darkgreen", "white"), cex = 2.0, fontfamily = "serif", fontface = "bold", cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"), cat.cex = 1.8, cat.fontface = "bold", cat.fontfamily = "serif")
结果直接输出为tiff格式的文件,如图所示:
2.基于ggvenn包绘制韦恩图
2.1 安装和加载R包
if (!require(devtools)) install.packages("devtools")devtools::install_github("yanlinlin82/ggvenn")library(ggvenn)
由于ggvenn包保存在Github网站上,因此我们需要借助devtools::install_github()来进行安装。
2.2 绘制韦恩图
x <- list(A = A,B = B,C = C,D = D) #生成一个list数据集ggvenn(x,c("A","B","C","D")) #一键出图
ggvenn包可以绘制2到4组数据组成的韦恩图,其中输入数据可以整理成数据框或者列表格式。而与VennDiagram包不同的是,ggvenn包可以自动填充默认颜色,并默认输出百分比,输出的图像可以直接用于发表的韦恩图,个人感觉还是十分不错的。
当然,我们也可以对其中的参数进行修改,包括图像的填充颜色等方面,这里呢提供可供修改的参数内容,大家可以自行尝试使用。
ggvenn(data,columns = NULL,show_elements = FALSE,show_percentage = TRUE,fill_color = c("blue", "yellow", "green", "red"),fill_alpha = 0.5,stroke_color = "black",stroke_alpha = 1,stroke_size = 1,stroke_linetype = "solid",set_name_color = "black",set_name_size = 6,text_color = "black",text_size = 4,label_sep = ",")
3.基于ggVennDiagram包绘制韦恩图
3.1 安装和加载R包
#安装方法一:install.packages("ggVennDiagram")#安装方法二:# install.packages("devtools")devtools::install_github("gaospecial/ggVennDiagram")library(ggVennDiagram) #读取R包关于ggVennDiagram包的安装,我们可以通过install.packages()函数来进行安装,也可以从Github上下载安装最新的版本。
3.2 绘制韦恩图
ggVennDiagram将每个区域的填充色映射为数量,使我们可以直观地观察不同部分之间的差异。那么,什么叫做填充色映射为数量呢?先来看看绘图的效果便知。
ggVennDiagram(x[1:3]) #绘制三维韦恩图
结果显示:
ggVennDiagram(x[1:4]) #绘制四维韦恩图
结果显示:
没错,ggVennDiagram包可以直接根据每格的数量,赋予颜色的不同深浅,颜色越红代表数量越高。是不是觉得格调瞬间就高了很多呢?
#调整颜色library(ggplot2)ggVennDiagram(x) + scale_fill_gradient(low="blue",high = "red")
当然,如果对颜色不满意的话,我们也可以使用ggplot2包的scale_fill_gradient()函数进行修改,比如对其赋值,低的颜色为“blue”,高的“red”。
我还是分割线
好啦,本次的分享内容就到此为止了,大家可以根据自己的数据内容对自己课题中的韦恩图,挑选一个喜欢的样式,进行绘制。
回复“阿琛33”即可获得本次讲解 的示例代码~~
R数据清洗系列传送门
R语言小白入门课|一刻钟带你学会R数据转化
END

撰文丨阿  琛
排版丨四金兄
值班 | 小雪球

主编丨小雪球
欢迎大家关注解螺旋生信频道-挑圈联靠公号~

继续阅读
阅读原文