本期內(nèi)容同步發(fā)布于
單細(xì)胞天地
微信公眾號币呵。
回顧——細(xì)胞通訊網(wǎng)絡(luò)構(gòu)建
前面的帖子中我們已經(jīng)成功地進(jìn)行了細(xì)胞間通訊網(wǎng)絡(luò)的構(gòu)建世澜,總的來看借助下面簡易的分析流程即可完成:
library(CellChat)
library(Seurat)
library(SeuratData)
library(future)
#load data
data("pbmc3k.final")
#create CellChat object
cellchat <- createCellChat(object = GetAssayData(object = pbmc3k.final, slot = 'data'),
meta = pbmc3k.final@meta.data,
group.by = 'seurat_annotations')
## The cell groups used for CellChat analysis are Naive CD4 T Memory CD4 T CD14+ Mono B CD8 T FCGR3A+ Mono NK DC Platelet
#add CellChat database
cellchat@DB <- CellChatDB.human #human
#cell communication
plan(strategy = 'multiprocess', workers = 4)
cellchat <- subsetData(cellchat) #save time and memory
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
cellchat <- computeCommunProb(cellchat)
cellchat <- filterCommunication(cellchat, min.cells = 10)
#pathway level
cellchat <- computeCommunProbPathway(cellchat)
cellchat <- aggregateNet(cellchat)
今天繼續(xù)介紹:
(1)我們?nèi)绾蝸?strong>理解這些分析結(jié)果;
(2)我們?nèi)绾螌⑦@些結(jié)果有效地展示出來雀久,也就是可視化宿稀。
CellChat分析結(jié)果可視化
目前CellChat
提供了多種圖形來對結(jié)果進(jìn)行可視化,包括但不限于:
Hierarchical plot (層次聚類圖)
Chord diagram (和弦圖)
Circle plot (環(huán)狀圖)
Bubble plot (氣泡圖)
此外結(jié)果的可視化也分為在單個受體-配體層次與代謝通路(多個受體-配體整合)層次赖捌,上游分析的相關(guān)結(jié)果分別存儲在cellchat@net
和cellchat@netP
中祝沸。
單個受體-配體層次
這個部分的可視化主要是統(tǒng)計不同細(xì)胞類群之間的受體-配體對數(shù)和通訊強(qiáng)度(strength)。
library(dplyr)
groupSize <- table(cellchat@idents) %>% as.numeric()
par(mfrow = c(1, 2), xpd = TRUE)
netVisual_circle(cellchat@net$count,
vertex.weight = groupSize,
weight.scale = T,
label.edge = F,
title.name = "Number of interactions")
netVisual_circle(cellchat@net$weight,
vertex.weight = groupSize,
weight.scale = T,
label.edge = F,
title.name = "Interaction weights/strength")
首先簡單介紹一下par()
函數(shù)巡蘸,這是R基礎(chǔ)繪圖系統(tǒng)中一個比較常見的函數(shù)奋隶,在CellChat
中主要是為了排列多個圖形,例如這里的mfrow
參數(shù)的形式就為c(nr, nc)
悦荒,表示將后續(xù)繪制的圖形按照nr
行nc
列排布唯欣,而mfrow
表示先橫向后縱向,對應(yīng)的也有mfcol
表示先縱向后橫向搬味。
再來詳細(xì)介紹一下netVisual_circle()
函數(shù)境氢,這個環(huán)狀圖中最關(guān)鍵的兩個概念就是edge和vertex,前者指的是不同細(xì)胞類群之間相互關(guān)聯(lián)的“連線”碰纬,后者指的是位于環(huán)狀圖邊界上的各個細(xì)胞群的節(jié)點的大小萍聊,顯然在上面的例子中我們分別使用了不同細(xì)胞類群之間的受體-配體對數(shù)和通訊強(qiáng)度作為“連線”強(qiáng)度的度量,而不同細(xì)胞類群中的細(xì)胞數(shù)量作為節(jié)點大小的度量悦析。我們會對這些信息scale一下寿桨,防止差異過大影響可視化的結(jié)果。
為了讓信息不顯得那么冗余,我們也可以單獨可視化以每個細(xì)胞類群為信號起點的環(huán)狀圖亭螟,實現(xiàn)的思路很簡單挡鞍,以cellchat@net$weight
為例,這個矩陣中的每一行代表信號發(fā)出的細(xì)胞预烙,每一列代表接收信號的細(xì)胞墨微,所以我們可以通過分別可視化每一行的數(shù)據(jù)來研究以每個細(xì)胞群為信號起點的細(xì)胞間通訊:
groupSize <- table(cellchat@idents) %>% as.numeric()
par(mfrow = c(3, 3), xpd = TRUE)
for(i in 1:nrow(cellchat@net$weight)){
mat <- matrix(0,
nrow = nrow(cellchat@net$weight),
ncol = ncol(cellchat@net$weight),
dimnames = dimnames(cellchat@net$weight))
mat[i, ] <- cellchat@net$weight[i, ]
netVisual_circle(mat,
vertex.weight = groupSize,
weight.scale = T,
edge.weight.max = max(cellchat@net$weight),
title.name = rownames(mat)[i])
}
值得注意的是,這里多了一個參數(shù):edge.weight.max = max(cellchat@net$weight)
扁掸,這主要是為了讓不同的圖之間具有可比性翘县,因為都是按照總體的最大值進(jìn)行scale的。
信號通路層次可視化
單個受體-配體層次的分析只能讓我們知道哪些細(xì)胞類群之間可能存在通訊谴分,至于是何種類型的通訊锈麸、會有什么生物學(xué)意義卻比較難知道,這個時候如果能夠?qū)⑦@種通訊放到信號通路的層次上就能較好地解決這個問題牺蹄。
首先來查看一下我們分析的結(jié)果中有哪些信號通路:
cellchat@netP$pathways
## [1] "MHC-I" "CD99" "MIF" "MHC-II" "GALECTIN" "ITGB2"
## [7] "APP" "ANNEXIN" "SELPLG" "LCK" "ICAM" "CD40"
## [13] "ESAM" "IL16"
Hierarchical plot
Hierarchical plot一個比較突出的優(yōu)點在于能夠比較清晰有層次地展示細(xì)胞類群之間的通訊掐隐,我們可以通過指定vertex.receiver
來自定義信號接收細(xì)胞群,這個參數(shù)可以是細(xì)胞類群的名稱钞馁,例如CD8 T,也可以是索引带饱,例如c(1, 2, 3)
烘贴。
cellchat@meta$seurat_annotations %>% head()
## [1] Memory CD4 T B Memory CD4 T CD14+ Mono NK
## [6] Memory CD4 T
## 9 Levels: Naive CD4 T Memory CD4 T CD14+ Mono B CD8 T FCGR3A+ Mono NK ... Platelet
vertex.receiver <- 1:3 #Naive CD4 T, Memory CD4 T, CD14+ Mono
cellchat@netP$pathways
## [1] "MHC-I" "CD99" "MIF" "MHC-II" "GALECTIN" "ITGB2"
## [7] "APP" "ANNEXIN" "SELPLG" "LCK" "ICAM" "CD40"
## [13] "ESAM" "IL16"
pathways.show <- 'MHC-I'
netVisual_aggregate(cellchat,
signaling = pathways.show,
vertex.receiver = vertex.receiver,
layout = 'hierarchy')
這里我們可視化了Naive CD4 T, Memory CD4 T, CD14+ Mono作為信號接收細(xì)胞群的MHC-I信號通路窒百,詳細(xì)來看Hierarchical plot:
左側(cè)部分展示的是以Naive CD4 T, Memory CD4 T, CD14+ Mono作為信號接收細(xì)胞群的MHC-I信號通路,其中左半部分是自分泌相關(guān)信號训措,這里的所謂自分泌信號就是指這幾類細(xì)胞類群自己釋放的信號作用于自己這幾類細(xì)胞,相應(yīng)的右半部分就是展示的旁分泌信號光羞,也就是其它類的細(xì)胞所釋放的信號作用于這幾類細(xì)胞绩鸣。
右側(cè)部分展示是以除了Naive CD4 T, Memory CD4 T, CD14+ Mono以外的其它細(xì)胞群作為信號接收細(xì)胞群的MHC-I信號通路,只不過此時左右半部分的信息反過來了:左半部分是旁分泌信號纱兑,右半部分是自分泌信號呀闻。
Chord diagram
netVisual_aggregate(cellchat,
signaling = pathways.show,
vertex.receiver = vertex.receiver,
layout = 'chord')
改一下layout
就可以實現(xiàn)Chord diagram,不過這個圖的信號很雜潜慎,將所有和MHC-I的信號糅合在了一起捡多,從這一點上來看效果不如Hierarchical plot。不過好在它還是可以和環(huán)狀圖一樣铐炫,接受sources.use
和targets.use
參數(shù)垒手,大大簡化圖形信息,幫助我們更精準(zhǔn)地定位到我們想要的內(nèi)容:
netVisual_aggregate(cellchat,
signaling = pathways.show,
sources.use = 1:2, #naive CD4 T, Memory CD4 T
targets.use = 5:6, #CD8 T, FCGR3A+ Mono
layout = 'chord')
還有一個玩法在于倒信,有的時候我們會在細(xì)胞類型注釋的時候?qū)δ硞€細(xì)胞類群進(jìn)行細(xì)分科贬,但是我們在可視化細(xì)胞通訊的時候可能會想將這一大類細(xì)胞單獨“聚”在一起,這個時候Chord diagram就來了:
#combine Naive CD4 T, Memory CD4 T and CD8 T
group.celltype = c(rep('T', 2), 'CD14+ Mono', 'B', 'T', 'FCGR3A+ Mono', 'NK', 'DC', 'Platelet')
names(group.celltype) = levels(cellchat@meta$seurat_annotations)
netVisual_aggregate(cellchat,
signaling = pathways.show,
group = group.celltype,
layout = 'chord')
可以看到這三類細(xì)胞已經(jīng)聚在一起了鳖悠。
Circle plot
這個部分和前面一樣榜掌,只不過現(xiàn)在是在信號通路的層次上進(jìn)行的罷了:
netVisual_aggregate(cellchat,
signaling = pathways.show,
layout = 'circle')
Bubble plot
netVisual_bubble(cellchat,
sources.use = 1:3,
targets.use = 4:7,
signaling = 'MHC-I')
## Comparing communications on a single object
氣泡圖的橫軸標(biāo)明了信號起始和接收的細(xì)胞類群(以 -> 標(biāo)明)优妙。同時縱軸標(biāo)上了屬于這個MHC-I信號通路的具體細(xì)胞間相互作用(受體-配體對),你可以通過pairLR.use
傳入字符串向量來選擇性可視化哪些具體的相互作用唐责。還有很多其它實用的參數(shù)鳞溉,例如使用remove.isolate = TRUE
去掉空白行和空白列,讓整個圖形僅僅保留有信號的部分鼠哥。
除了這幾類主要的可視化以外熟菲,我們還可以使用熱圖:
netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = 'Reds')
## Do heatmap based on a single object
左側(cè)已經(jīng)標(biāo)明了信號發(fā)出的細(xì)胞群,上方和右方的柱狀圖分別表示每一列和每一行數(shù)值的總和朴恳。
無論怎么變抄罕,最終總還是在對cellchat@netP$prob
這個array在可視化。此外這些函數(shù)的幫助文檔都比較通俗易懂于颖,大家可以多用?
來獲取幫助信息呆贿。
基因表達(dá)量可視化
我們在Seurat對象中很容易進(jìn)行基因表達(dá)的可視化,CellChat
同樣為我們提供了可能性森渐,我們只需要使用plotGeneExpression()
函數(shù)就可以了做入,我們可以指定我們想可視化的信號通路(此時會自動可視化該信號通路內(nèi)富集的重要基因),也可以指定一些具體的基因同衣,還可以指定可視化圖形的類型:"violin"竟块,"dot","bar"耐齐。
plotGeneExpression(cellchat, signaling = 'MHC-I')
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
可視化的簡單分享就到這里啦~大家趕緊行動起來吧浪秘!