Venn圖經(jīng)常用于表現(xiàn)組間重疊元素的數(shù)量信息。但是隨著分組數(shù)量的增多役纹,Venn圖的結(jié)構(gòu)會越漸復雜偶摔,如下所示,當分組數(shù)量為5組時促脉,已經(jīng)不容易從中識別交集概況了辰斋。因此策州,這也是為什么很少見到5組以上的Venn圖的原因。
可是有些時候锰什,確實有待于展現(xiàn)大于5組的集合下硕。如果不使用Venn圖丁逝,應(yīng)該怎樣做呢汁胆?此時不妨試下UpSet圖,它是在較多分組條件時取代Venn圖表現(xiàn)數(shù)據(jù)結(jié)構(gòu)的有效方案霜幼。
有關(guān)UpSet圖的簡介
那么嫩码,UpSet圖是怎樣的一種結(jié)構(gòu)呢?如下展示了一個簡單的UpSet圖和Venn圖的關(guān)系罪既。
同時Venn圖的另一缺點是結(jié)構(gòu)也比較單一铸题,只能表達交集數(shù)量信息。相比之下琢感,UpSet圖的內(nèi)容也可以更加豐富丢间。
不妨來看一篇文獻“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圖可視化多組間的共有元素以及元素類別的。
橫向是不同的試驗處理組驹针,橫向柱形圖代表了各處理組中上調(diào)基因的數(shù)量烘挫;縱向柱形圖代表了各處理組之間,重疊的上調(diào)基因數(shù)量柬甥,柱形圖中的顏色表示了基因的功能分類占比饮六。和常規(guī)Venn圖一比,優(yōu)勢非常明顯:數(shù)值展示了數(shù)量苛蒲,柱形圖長度呈現(xiàn)了直觀的大小比較卤橄,堆疊式柱形圖還反映了元素亞組,柱形圖按高度排列后很清晰地展現(xiàn)了哪些組之間存在更高程度的重疊臂外,等等窟扑。
圖2,UpSet圖表示了在不同芳香化合物條件下生長的污叉絲孔菌所有上調(diào)基因的比較分析漏健,展示了基因數(shù)量最多的前25個集合嚎货。
R包UpSetR的集合可視化
是不是對UpSet圖有所心動了?接下來漾肮,小編給大家簡介一個能夠繪制UpSet圖的R包厂抖,UpSetR,該包非常簡單易學克懊。
首先準備一個數(shù)據(jù)集忱辅,假設(shè)這里希望查看group1-5組中七蜘,重疊的差異基因的數(shù)量信息。數(shù)據(jù)集中墙懂,每一行表示一種基因(不要有重復值橡卤,即基因名稱是唯一的),每一列代表一個分組损搬,數(shù)值1表示該基因在該組中存在顯著差異表達碧库,0則表示無差異。
接下來將該表讀入到R中巧勤,加載UpSetR包嵌灰,繪制UpSet圖展示集合交集概況。繪制UpSet圖的函數(shù)是upset()颅悉,用法非常簡潔智能沽瞭。
#讀入基因列表文件,gene.txt就是上文展示的示例數(shù)據(jù)
gene <- read.delim('gene.txt', header = TRUE, row.names = 1, sep = '\t')
#繪制UpSet圖
library(UpSetR)
#一條命令就得到了
#nset為展示的最大分組數(shù)量剩瓶,nintersects為最大交集數(shù)量
upset(gene, nset = 5, nintersects = 100)
#如果希望添加排序,通過order.by參數(shù)指定
#例如先展示所有的交集延曙,后展示非交集區(qū)域
upset(gene, nset = 6, nintersects = 100, order.by = c('freq', 'degree'), decreasing = c(TRUE, TRUE))
#關(guān)注特定的交集,或者某特定元素的分布枝缔,通過queries參數(shù)指定
#例如關(guān)注所有分組的交集(標記藍色)布疙,以及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')))
如上是UpSet圖的畫法魂仍,是不是很簡單易學拐辽?除了UpSet圖可能剛開始看到時會有點困惑,畢竟該圖的結(jié)構(gòu)確實有點難理解擦酌,但是當熟悉了之后俱诸,您會發(fā)現(xiàn)它能夠表達比Venn圖更豐富的信息。特別是當分組數(shù)大于5組赊舶,并且存在需要重點標識的交集區(qū)域睁搭,或者元素分類亞組時,UpSet圖是個非常不錯的選擇笼平。