Venn图经常用于表现组间重叠元素的数量信息。但是随着分组数量的增多,Venn图的结构会越渐复杂,如下所示,当分组数量为5组时,已经不容易从中识别交集概况了。因此,这也是为什么很少见到5组以上的Venn图的原因。
3组、4组、5组的韦恩图样式,分组越多越复杂
可是有些时候,确实有待于展现大于5组的集合。如果不使用Venn图,应该怎样做呢?此时不妨试下UpSet图,它是在较多分组条件时取代Venn图表现数据结构的有效方案。
那么,UpSet图是怎样的一种结构呢?如下展示了一个简单的UpSet图和Venn图的关系。
韦恩图和UpSet图结构对比
同时Venn图的另一缺点是结构也比较单一,只能表达交集数量信息。相比之下,UpSet图的内容也可以更加丰富。
不妨来看一篇文献“Kowalczyk J E, Peng M, Pawlowski M, et al. The
White-Rot Basidiomycete Dichomitus squalens Shows Highly Specific
Transcriptional Response to Lignocellulose-Related Aromatic Compounds”中是如何巧妙利用UpSet图可视化多组间的共有元素以及元素类别的。
横向是不同的试验处理组,横向柱形图代表了各处理组中上调基因的数量;纵向柱形图代表了各处理组之间,重叠的上调基因数量,柱形图中的颜色表示了基因的功能分类占比。和常规Venn图一比,优势非常明显:数值展示了数量,柱形图长度呈现了直观的大小比较,堆叠式柱形图还反映了元素亚组,柱形图按高度排列后很清晰地展现了哪些组之间存在更高程度的重叠,等等。
文献中的UpSet图示例
图2,UpSet图表示了在不同芳香化合物条件下生长的污叉丝孔菌所有上调基因的比较分析,展示了基因数量最多的前25个集合。
是不是对UpSet图有所心动了?接下来,小编给大家简介一个能够绘制UpSet图的R包,UpSetR,该包非常简单易学。
首先准备一个数据集,假设这里希望查看group1-5组中,重叠的差异基因的数量信息。数据集中,每一行表示一种基因(不要有重复值,即基因名称是唯一的),每一列代表一个分组,数值1表示该基因在该组中存在显著差异表达,0则表示无差异。
作图数据内容样式
接下来将该表读入到R中,加载UpSetR包,绘制UpSet图展示集合交集概况。绘制UpSet图的函数是upset(),用法非常简洁智能。
!!!**************************************************
#读入基因列表文件,gene.txt就是上文展示的示例数据
gene <- read.delim('gene.txt', header = TRUE, row.names = 1, sep = '\t')
#绘制UpSet图
library(UpSetR)
#一条命令就得到了
#nset为展示的最大分组数量,nintersects为最大交集数量
upset(gene, nset = 5, nintersects = 100)
!!!**************************************************
R语言绘制UpSet图,默认样式
!!!**************************************************
#如果希望添加排序,通过order.by参数指定
#例如先展示所有的交集,后展示非交集区域
upset(gene, nset = 6, nintersects = 100, order.by = c('freq', 'degree'), decreasing = c(TRUE, TRUE))
!!!**************************************************
R语言绘制UpSet图,添加内容排序
!!!**************************************************
#关注特定的交集,或者某特定元素的分布,通过queries参数指定
#例如关注所有分组的交集(标记蓝色),以及group1和group2的交集(标记红色)
upset(gene, nset = 5, nintersects = 100, order.by = c('freq', 'degree'), decreasing = c(TRUE, TRUE),
queries = list(list(query = intersects, params = c('group1', 'group2', 'group3', 'group4', 'group5'), color = 'blue'),
list(query = intersects, params = c('group1', 'group2'), color = 'red')))
!!!**************************************************
R语言绘制UpSet图,标识重要的交集
如上是UpSet图的画法,是不是很简单易学?除了UpSet图可能刚开始看到时会有点困惑,毕竟该图的结构确实有点难理解,但是当熟悉了之后,您会发现它能够表达比Venn图更丰富的信息。特别是当分组数大于5组,并且存在需要重点标识的交集区域,或者元素分类亚组时,UpSet图是个非常不错的选择。
!
!
!
注:!!!*******之间为R脚本内容。