R绘图|韦恩图的常见绘制方法

Python012

R绘图|韦恩图的常见绘制方法,第1张

实验设计:对照组,TNF处理组,TGF处理组,IL4处理组,每组3个生物学重复

实验分组:TNF组 vs 对照组;TGF组 vs 对照组;IL4组 vs 对照组

所得数据:三种分组比较下的差异基因

最终需求:直观展示三组差异结果的共同基因及特有基因

以上这类设计和需求是高通量数据后期展示时常见的需求,通常通过绘制韦恩图(Venn图)就可以满足!

如下图左侧,就是典型的韦恩图展示形式,不同的颜色代表不同的来源,它们之间的共有基因或是特有基因数量一目了然,可直观展示出不同来源数据之间的在成分上的异同点。

近几年针对这类需求,又出现了一种更棒的可视化形式,如下图,直观展示7组数据之间的关系,一目了然。

今天呢,来简单演示下火山图的绘制方法,有数据的小伙伴可以试试!数据就以TNF组 vs 对照组;TGF组 vs 对照组;IL4组 vs 对照组三组差异基因来做案例。

首先清除环境,安装并加载所需要的R包

读入数据并对数据做简单处理

读入IL4组差异数据

将3组数据构建成list

用venn包绘图

首先清除环境,安装并加载所需要的R包

读入数据并对数据做简单处理

首先清除环境,安装并加载所需要的R包

读入数据并对数据做简单处理

更多内容可关注公共号“YJY技能修炼”~~~

往期回顾

R绘图|ggplot2火山图的绘制

R绘图|ggplot2散点图的绘制

R绘图|pheatmap热图绘制——基础篇

R绘图|pheatmap热图绘制——中阶篇

R绘图|pheatmap热图绘制——高阶篇

差异表达基因分析是根据表型协变量(分类变量)鉴定组间差异表达,它属于监督性分类的一种。在鉴定差异表达基因以前,一般需要对表达值实施非特异性过滤(在机器学习框架下属于非监督性分类),因为适当的非特异性过滤可以提高差异表达基因的检出率、甚至是功效。R分析差异表达基因的library有很多,但目前运用最广泛的Bioconductor包是limma。

鉴定差异表达基因是表达谱芯片分析pipeline中必须的分析步骤。差异表达基因分析是根据表型协变量(分类变量)鉴定组间差异表达,它属于监督性分类的一种。在鉴定差异表达基因以前,一般需要对表达值实施非特异性过滤(在机器学习框架下属于非监督性分类),因为适当的非特异性过滤可以提高差异表达基因的检出率、甚至是功效。R分析差异表达基因的library有很多,但目前运用最广泛的Bioconductor包是limma。

本专题示例依然来自GEO数据库中检索号为GSE11787 的Affymetrix芯片的数据,数据介绍参阅专题一。

>library(limma)

>design <- model.matrix(~ -1+factor(c(1,1,1, 2,2,2)))

这个是根据芯片试验设计,对表型协变量的水平进行design,比如本例中共有6张芯片,前3张为control对照组,后3张芯片为实验处理组,用1表示对照组,用2表示处理组。其他试验设计同理,比如2*2的因子设计试验,如果每个水平技术重复3次,那么可以表示为:design <- model.matrix(~ -1+factor(c(1,1,1, 2,2,2, 3,3,3, 4,4,4)))。接上面的程序语句继续:

>colnames(design) <- c("control", "LPS")

>fit <- lmFit(eset2, design)

>contrast.matrix <- makeContrasts(control-LPS, levels=design)

>fit <- eBayes(fit)

>fit2 <- contrasts.fit(fit, contrast.matrix)

>fit2 <- eBayes(fit2)

>results<-decideTests(fit2, method="global", adjust.method="BH", p.value=0.01, lfc=1.5)

>summary(results)

>vennCounts(results)

>vennDiagram(results)

比较遗憾的是,目前limma自带的venn作图函数不能做超过3维的高维venn图,只能画出3个圆圈的venn图,即只能同时对三个coef进行venn作图。上面的venn图只有一个coef,太简单了。下面是一个由本实验室芯片数据得出的三个coef的venn图例:

>heatDiagram(results,fit2$coef)

红色为control中(与LPS相比)的高表达基因,绿色为control中(与LPS相比)的低表达基因,x轴的数字表示差异表达基因在eset2中所处的位置。

>x<-topTable(fit2, coef=1, number=10000, adjust.method="BH", sort.by="B", resort.by="M")

>write.table(x, file="limma.xls", row.names=F, sep="\t")

将结果写入limma.xls文件中,内容包括AveExpr值(比较组间绝对值的平均差异值)、logFC值(差异倍数)、t值、P值、q值(即adj.P.Val值)和B值。一般logFC值、P值、q值和AveExpr值用来作为差异表达的判断标准,比如差异倍数在2倍以上、绝对差异表达在10以上、P值小于0.01等。在Excel文件中,根据各项判断标准排序,可以很容易地得到差异表达基因列表,这个列表可以用来进行后续的分析,如GO注释、基因网络绘制等。

专题一中提到实际研究中,一般只用差异表达基因进行聚类分析,在R中,根据差异表达结果过滤表达值很简单(具体的值可以依据芯片数据的实际情况设定,比如P值可以设宽松点0.05、logFC的绝对值也可设为1或2、绝对表达差异也可设低一点,如6或8这样的值):

韦恩(Venn)图是常见统计图之一,用于展示各样本(或分组)之间共有(或特有)元素的数量(或比例)。

例如做RNA-seq的最直接目的,大多是鉴定差异表达的基因。当试验涉及到多分组情况时,常需要展示多组间共享的差异基因数量,这个时候就要使用到韦恩Venn图。例如以下示例,植物组织中响应7天氮缺乏(-N_7d)、7天磷酸盐缺乏(-Pi_7d)和盐胁迫(d)、冷胁迫(e)或干旱胁迫(f)的差异表达lncRNA的Venn图。

文献中通常提到,这些Venn图一般通过一些R包(如VennDiagram)来做。

本篇教程,就让我带您学习如何使用R包VennDiagram绘制Venn图,以及如何统计各组元素的交集。

首先准备输入数据。既然期望比较各组共有/特有元素,那么就可以将各组中所包含的元素提取出来,粘贴到一个新的列表中。

如下图示例,一共包含4个分组,group1-4,下方是各组中所包含的元素名称。各列不等长没关系,某一列内有重复的值也没关系,后续读到R中后能够自动识别并去除空值或重复值。

接下来,将该文件读到R中,绘制Venn图。

VennDiagram包中的函数venn.diagram(),可以直接基于原始数据自动统计并绘制Venn图。

工作路径下输出一张图片“venn2.png”,打开就是绘制的Venn图。

这是展示的两组的,再展示一个四组比较的。

同样地,工作路径下输出一张图片“venn4.png”,打开就是绘制的Venn图。

以上自动读取原始数据,并统计各组之间的交集状态,获取共有元素的数量信息后,绘制Venn图,整个过程一气呵成。

但是,如果期望获得各组之间的交集元素具体包含哪些,并将这些交集元素的名称输出出来,应该怎样做呢?

VennDiagram包中的函数get.venn.partitions()可以实现这个功能,参考以下示例。

工作路径下输出文件“venn4_inter.txt”,可以用Excel打开。

group1-4中,TRUE代表该组中出现的元素,FALSE则代表未出现的元素。

count为交集元素数量,values为交集元素名称。