赏硕兀基圖在單細(xì)胞數(shù)據(jù)探索中的應(yīng)用

什么是闪酉瘢基圖

桑基圖(Sankey diagram),即桑基能量分流圖锦募,也叫杀记常基能量平衡圖馆纳。它是一種特定類型的流程圖,圖中延伸的分支的寬度對(duì)應(yīng)數(shù)據(jù)流量的大小汹桦,比較適用于用戶流量等數(shù)據(jù)的可視化分析鲁驶。因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機(jī)的能源效率圖”而聞名,此后便以其名字命名為“晌杪妫基圖”钥弯。

用一個(gè)故事來介紹一下桑基圖:



這個(gè)非常著名的圖是Charles Minard在1869年所作的拿破侖東征俄國的信息圖葛作。Charles Minard是信息圖表的之父寿羞,他是信息圖領(lǐng)域的創(chuàng)始者。這張圖描繪的是拿破侖在1812到1813年進(jìn)攻俄國的情況赂蠢。它的背景是一個(gè)真實(shí)的地圖绪穆,西邊是波蘭的邊境,東邊是莫斯科虱岂。圖上那條主線的寬度代表拿破侖軍隊(duì)的人數(shù)玖院,黃色表示進(jìn)攻路線,黑色表示撤退的路線: 他開始于42萬人第岖,在向莫斯科進(jìn)軍的過程中喪失了很多人,到達(dá)莫斯科時(shí)只剩下10萬人郊酒,而最后從莫斯科活著返回的只剩下1萬人键袱。

為什么說這個(gè)圖好呢燎窘,因?yàn)槌酥骶€的寬度之外褐健,這張圖還告訴了你更多的東西。畫面下面的折線圖告訴你當(dāng)時(shí)的溫度澜汤,其中最高的點(diǎn)是0度,最低到達(dá)過零下30度谁不,回城的黑線周圍嗨標(biāo)注了月份烛缔,可以看出轩拨,拿破侖的軍隊(duì)在達(dá)打到莫斯科的時(shí)候已經(jīng)是將近十月分了,等到完全撤離俄國已經(jīng)是12月份了砍濒,如果你仔細(xì)觀察爸邢,會(huì)發(fā)現(xiàn)在撤退過程中他們路過了一條叫Studienska的河杠河,軍隊(duì)人數(shù)在河兩岸出現(xiàn)了劇減,原來那個(gè)時(shí)候天氣寒冷待诅,軍隊(duì)長促情況下淌水過河卑雁,于是在這條寒冷的河中凍死了很多人测蹲。

根據(jù)Edward Tufte所總結(jié)的信息設(shè)計(jì)原則:

  • 這個(gè)圖讓顯示出了比較關(guān)系(Show comparisons, contrasts, differences)弛房,比如軍隊(duì)人數(shù)的起始時(shí)候的寬度和結(jié)束時(shí)候的寬度的強(qiáng)烈對(duì)比,比如過那條河流的時(shí)候軍隊(duì)人數(shù)的劇烈的變化等等粹排。
  • 這個(gè)圖解釋了因果關(guān)系(Show causality, mechanism, structure, explanation)顽耳,比如時(shí)間膝迎,溫度和軍隊(duì)人數(shù)的關(guān)系限次。
  • 這個(gè)圖有多個(gè)變量(Multivariate analysis)卖漫,1), 軍隊(duì)人數(shù)。 2), 地理的位置(經(jīng)度和緯度)3), 軍隊(duì)的行進(jìn)方向突委。 4), 溫度。 5), 時(shí)間钧唐。

所有的這些信息都不是獨(dú)立存在的钝侠,他們結(jié)合在一起,將觀眾帶入當(dāng)時(shí)的拿破侖的旅程忽舟,同時(shí)能讓人感受到無情的戰(zhàn)爭(zhēng)奪走人們生命的痛苦叮阅。

桑基圖怎么看
  • 線條的走向
  • 粗細(xì)的變化
  • 節(jié)點(diǎn)間的比較
繪制屬于自己的衫盏基圖

在單細(xì)胞數(shù)據(jù)分析中有一個(gè)關(guān)鍵的步驟FindClusters(分群拌汇,以啟發(fā)樣本中可能有的細(xì)胞類型數(shù)量)担猛,但是這個(gè)目前用的方法是非監(jiān)督聚類,也就是數(shù)據(jù)驅(qū)動(dòng)的,不依賴生物學(xué)背景貌嫡。而且常常帶來參數(shù)詛咒:如kmeans的K值不同岛抄,得到的分群數(shù)量不同;Seurat中FindClusters的不同 resolution 參數(shù)也會(huì)帶來不同的分群數(shù)量蹭秋。

于是,我的樣本中到底有多少細(xì)胞類型洞豁?

所以只靠一個(gè)參數(shù)丈挟,往往不能滿足要求,或者說啟發(fā)的力度還不夠桐绒。那就嘗試多個(gè)分群參數(shù)吧咧叭,得到的結(jié)果可能是這樣的:

> head(pbmc_small@meta.data)
                  orig.ident nCount_RNA nFeature_RNA RNA_snn_res.0.8 letter.idents groups RNA_snn_res.1 RNA_snn_res.0.4
ATGCCAGAACGACT SeuratProject         70           47               0             A     g2             0               0
CATGGCCTGTGCAT SeuratProject         85           52               0             A     g1             0               0
GAACCTGATGAACC SeuratProject         87           50               0             B     g2             0               0
TGACTGGATTCTCA SeuratProject        127           56               0             A     g2             0               0
AGTCAGACTGCACA SeuratProject        173           53               0             A     g2             0               0
TCTGATACACGTGT SeuratProject         70           48               0             A     g1             0               0
               RNA_snn_res.1.2 RNA_snn_res.1.6 seurat_clusters RNA_snn_res.0.6 RNA_snn_res.1.4
ATGCCAGAACGACT               0               3               3               0               4
CATGGCCTGTGCAT               5              10              10               0               8
GAACCTGATGAACC               5               9               9               0               6
TGACTGGATTCTCA               0               7               7               0               1
AGTCAGACTGCACA               0               3               3               0               4
TCTGATACACGTGT               0               3               3               0               4

如果用人類的肉眼來比較不同RNA_snn_res.下的分群結(jié)果可能會(huì)比較困難派撕。不過终吼,借助R方便地看出某一分群下商佛,每個(gè)群的細(xì)胞數(shù)量:

> table(pbmc_small@meta.data$RNA_snn_res.1.6)

 0  1 10 11  2  3  4  5  6  7  8  9 
17 14  2  2  9  6  7  5  5  3  6  4 

但是有了桑基圖情況就不一樣了玛追,變得一目了然起來:

#先執(zhí)行不同resolution 下的分群
library(Seurat)
pbmc_small <- FindClusters(
  object = pbmc_small,
  resolution = c(seq(.4,1.6,.2))
)

繪制細(xì)胞分群的桑基圖:

#install.packages("ggalluvial")
library(ggalluvial)
library(tidyverse)

head(pbmc_small@meta.data)
ggplot(data = pbmc_small@meta.data,
       aes(axis1 = RNA_snn_res.0.4, axis2 = RNA_snn_res.0.6,axis3 = RNA_snn_res.0.8,axis4 = RNA_snn_res.1,
           axis5 = RNA_snn_res.1.2,axis6 = RNA_snn_res.1.4,axis7 = RNA_snn_res.1.6)) +
  scale_x_discrete(limits = c(paste0("RNA_snn_res.",seq(.4,1.6,.2))), expand = c(.01, .05)) +
  geom_alluvium(aes(fill = RNA_snn_res.1.6)) +
  geom_stratum() + geom_text(stat = "stratum", infer.label = TRUE) +
  #coord_polar()+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))+
  ggtitle("cell number in each cluster")

可以清晰地看出,RNA_snn_res.1.6每個(gè)群的來源,也可以啟發(fā)在RNA_snn_res.1.2時(shí)cluster0可能有三個(gè)亞群妇汗,cluster4有兩個(gè)亞群杨箭。這不僅解析了resolution 參數(shù)(其他的分群算法也一樣)捣郊,同時(shí)啟發(fā)了樣本的異質(zhì)性。

有了這個(gè)赡锢基圖的框架琐旁,其實(shí)很多我們想在這個(gè)圖上展示的metadata信息就變得容易了,比如我們可以看一下某一細(xì)胞類型流向或者樣本的流向,只需要在metadata中加上一列即可。

ggplot(data = pbmc_small@meta.data,
       aes(axis1 = RNA_snn_res.0.4, axis2 = RNA_snn_res.0.6,axis3 = RNA_snn_res.0.8,axis4 = RNA_snn_res.1,
           axis5 = RNA_snn_res.1.2,axis6 = RNA_snn_res.1.4,axis7 = RNA_snn_res.1.6)) +
  scale_x_discrete(limits = c(paste0("RNA_snn_res.",seq(.4,1.6,.2))), expand = c(.01, .05)) +
  geom_alluvium(aes(fill = groups)) +
  geom_stratum() + geom_text(stat = "stratum", infer.label = TRUE) +
  #coord_polar()+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))+
  ggtitle("cell number in each cluster")

或者看nFeature_RNA 的變化,即是不是nFeature_RNA 高的分到一群呢奏夫?

ggplot(data = pbmc_small@meta.data,
       aes(axis1 = RNA_snn_res.0.4, axis2 = RNA_snn_res.0.6,axis3 = RNA_snn_res.0.8,axis4 = RNA_snn_res.1,
           axis5 = RNA_snn_res.1.2,axis6 = RNA_snn_res.1.4,axis7 = RNA_snn_res.1.6)) +
  scale_x_discrete(limits = c(paste0("RNA_snn_res.",seq(.4,1.6,.2))), expand = c(.01, .05)) +
  geom_alluvium(aes(fill = nFeature_RNA )) +
  geom_stratum() + geom_text(stat = "stratum", infer.label = TRUE) +
  #coord_polar()+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))+
  ggtitle("cell number in each cluster")
clustertree

在聚類分析中麻削,由于它的啟發(fā)性本質(zhì)呛哟,經(jīng)常需要比較不同分群的結(jié)果。下面提供另一種(簡(jiǎn)單直白的)“杀罟拢基圖“淌铐,供大家參考:

clustree(pbmc_small@meta.data, prefix = "RNA_snn_res.")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吐葱,一起剝皮案震驚了整個(gè)濱河市弟跑,隨后出現(xiàn)的幾起案子哎甲,更是在濱河造成了極大的恐慌炭玫,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異践图,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闽瓢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門缨叫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事座享≡眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長严拒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮航瞭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滨彻。我一直安慰自己休偶,他們只是感情好踏兜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布庇麦。 她就那樣靜靜地躺著,像睡著了一般喜德。 火紅的嫁衣襯著肌膚如雪山橄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天舍悯,我揣著相機(jī)與錄音航棱,去河邊找鬼萌衬。 笑死饮醇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秕豫。 我是一名探鬼主播朴艰,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼混移!你這毒婦竟也來了祠墅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤歌径,失蹤者是張志新(化名)和其女友劉穎毁嗦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體回铛,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狗准,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茵肃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腔长。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖免姿,靈堂內(nèi)的尸體忽然破棺而出饼酿,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布故俐,位于F島的核電站想鹰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏药版。R本人自食惡果不足惜辑舷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望槽片。 院中可真熱鬧何缓,春花似錦、人聲如沸还栓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩盒。三九已至谷婆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辽聊,已是汗流浹背纪挎。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跟匆,地道東北人异袄。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像玛臂,于是被迫代替她去往敵國和親烤蜕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是桑基圖 扇蓿基圖(Sankey diagram),即赡抛眩基能量分流圖锋勺,也叫桑基能量平衡圖狡蝶。它是一種特定類型的流程...
    周運(yùn)來就是我閱讀 34,839評(píng)論 11 43
  • 商叭牵基圖是一種方便說明信息苏章、資源流動(dòng)和圖形,圖形中的分、合正如漂流的分叉與匯合枫绅,如可用于比較不同簇間關(guān)系泉孩,可以用來表...
    村狗兒閱讀 3,773評(píng)論 1 8
  • 最近一部電影火爆了各大影院,刷爆了朋友圈并淋,和朋友一起感受了一下寓搬,確實(shí)是難得的佳作。特別是作為南京人县耽,在電影里還看見...
    假文藝中年人閱讀 530評(píng)論 2 0
  • 未來的自己: 你好句喷! 當(dāng)時(shí)間邁著一成不變的腳步不疾緩的走過春夏秋冬,走過日月的日子之后兔毙。未來的...
    呆萌的企鵝_6b03閱讀 185評(píng)論 0 0
  • 不知道是前段時(shí)間一直處于睡眠不足的狀態(tài)/12._1點(diǎn)有時(shí)候2點(diǎn)多睡覺,然后5點(diǎn)起來肴裙,運(yùn)動(dòng)趾唱,晨跑/.還是因?yàn)榭贫Y(jié)束...
    Lily向麗閱讀 360評(píng)論 0 0