单细胞测序数据分析——细胞通讯 CellChat

时间:2024-10-07 07:29:25

一、CellChat介绍

特别好的文章:CellChat细胞通讯分析(上)--文献解读 - 知乎 ()/p/525115168

 CellChat细胞通讯分析(中)--实操代码(单个样本) - 知乎 ()/p/525365897

基本流程: 

cellchat的导入的数据分为两个部分:标准化的矩阵data和细胞分组信息mata,data储存的是基因表达数据,行名是基因,列名是细胞。meta储存的是细胞标签,行名是细胞名 ,记住这个信息,可以方便于分析的时候取子集。

二、基本流程

(一)创建cellchat对象

  1. #首先得清空环境
  2. rm(list = ls())
  3. setwd("")
  4. BiocManager::install("sqjin/CellChat")#下载cellchat,可能需要在R里进行,不太好下载
  5. library(CellChat)
  6. library(patchwork)
  7. library(ggalluvial)
  8. library(igraph)
  9. library(dplyr)
  10. #需要安装rtools才能运行
  11. options(stringsAsFactors = FALSE) #输入数据不自动转换成因子(防止数据格式错误)
  12. options(=2*1024**3)
  13. #设置硬件参数,8线程
  14. suppressWarnings(suppressMessages(future::plan("multiprocess", workers = 8)))

1.数据下载和读取

  1. #下载数据
  2. #win+r wmic cpu get numberOfLogicalProcessors
  3. #load(url("/files/25950872"))#读取示例数据集
  4. #View(data_humanSkin)
  5. #saveRDS(data_humanSkin,'data_humanSkin.rds')
  6. #读取数据,这个数据必须要由两个部分组成,1.标准化的矩阵data.2.细胞分组信息meta
  7. data_humanSkin <- readRDS('data_humanSkin.rds')
  8. class(data_humanSkin)
  9. ## [1] "list"
  10. #示例数据:来源于人类皮肤
  11. #作者发表文献 #/articles/

2.取子集进行分析

  1. <- data_humanSkin$data # normalized data matrix
  2. meta <- data_humanSkin$meta # a dataframe with rownames containing cell mata data
  3. unique(meta$condition)
  4. ## [1] "LS" "NL"
  5. <- rownames(meta)[meta$condition == "LS"] # 按指定的变量提取细胞
  6. <- [, ]#取出对应细胞,也就是说,data的列名是meta的行名
  7. meta = meta[, ]#取出对应细胞的meta信息
  8. unique(meta$labels)#看meta中储存的细胞注释信息,稍后用它作为分组依据

3.创建cellchat对象

  1. cellchat <- createCellChat(object = , meta = meta, = "labels")
  2. #创建celllchat对象,指定通讯间的对象,用meta中的注释作为分组依据
  3. cellchat <- addMeta(cellchat, meta = meta)
  4. cellchat <- setIdent(cellchat, = "labels") # set "labels" as default cell identity
  5. groupSize <- (table(cellchat@idents)) #每种细胞的细胞数量

4.查看CellChatDB的组成,设置参考数据库

  1. # 选择合适的物种,可选,
  2. CellChatDB <-
  3. #查看数据库的组成比例
  4. showDatabaseCategory(CellChatDB)
  5. # 查看数据库具体信息
  6. CellChatDB$interaction[1:4,1:4]
  7. head(CellChatDB$cofactor)
  8. head(CellChatDB$complex)
  9. head(CellChatDB$geneInfo)
  10. <- subsetDB(CellChatDB, search = "Secreted Signaling")#取出相应分类用作分析数据库
  11. cellchat@DB <- #将数据库内容载入cellchat对象中,相当于设置好接下来要参考的数据库

 5.表达数据预处理

  1. cellchat <- subsetData(cellchat)#取出表达数据
  2. cellchat <- identifyOverExpressedGenes(cellchat)#寻找高表达的基因#
  3. cellchat <- identifyOverExpressedInteractions(cellchat)#寻找高表达的通路
  4. cellchat <- projectData(cellchat, )#投影到PPI,储存上一步的结果到cellchat@LR$LRsig

(二)推断配受体通讯网络

1.在配受体水平上计算细胞通讯

  1. #计算细胞与细胞之间通信的概率
  2. cellchat <- computeCommunProb(cellchat, = T)#默认计算方式为#type = "truncatedMean",
  3. ##去掉通讯数量很少的细胞,默认cutoff的值为20%,即表达比例在25%以下的基因会被认为是0, trim = 0.1可以调整比例阈值
  4. cellchat <- filterCommunication(cellchat, = 10)
  5. #将推断的结果提取出来
  6. <- subsetCommunication(cellchat)#将细胞通讯预测结果以数据框的形式取出
  7. #("DT"),DT就是展示数据框的一种工具,可以调节展示的参数等
  8. library(DT)
  9. DT::datatable()
  10. (,'')

2.在细胞通路水平上计算细胞间通讯,CellChat通过汇总与每个信号通路相关的所有配体-受体相互作用的通信概率来计算信号通路水平的通信概率。

  1. #计算信号通路水平上的细胞间通讯,通过汇总与每个信号通路相关的所有配体-受体相互作用的通信概率来计算信号通路水平的通信概率
  2. cellchat <- computeCommunProbPathway(cellchat)

3.计算聚合的细胞间通讯网络。我们可以通过计算链路的数量或汇总通信概率来计算聚合的细胞通信网络。用户还可以通过设置 和 来计算细胞组子集之间的聚合网络,使用circle plot显示任意两个细胞组之间的交互次数或总交互强度(权重)

  1. cellchat <- aggregateNet(cellchat)#计算细胞-细胞聚合通信网络
  2. groupSize <- (table(cellchat@idents))
  3. groupSize
  4. #组图,1行3列
  5. par(mfrow = c(1,3), xpd=TRUE)
  6. #使用圆图显示任意两个细胞群之间的相互作用数量或总相互作用强度(权重)。颜色和source是一致的,圈圈的大小是每个细胞群细胞的数量
  7. netVisual_circle(cellchat@net$count, = groupSize, = T,
  8. = F, = "Number of interactions")
  9. #总相互作用强度
  10. netVisual_circle(cellchat@net$weight, = groupSize, = T,
  11. = F, = "Interaction weights/strength")
  12. #以cDC2为中心的相互作用强度
  13. netVisual_circle(cellchat@net$weight, = groupSize, = T,
  14. = F, = "Interaction weights/strength",
  15. = 'cDC2')

  1. #检查每种细胞和其他细胞的互作情况
  2. mat <- cellchat@net$weight
  3. par(mfrow = c(3,4), xpd=TRUE)
  4. for (i in 1:nrow(mat)) {#
  5. mat2 <- matrix(0, nrow = nrow(mat), ncol = ncol(mat), dimnames = dimnames(mat))
  6. mat2[i, ] <- mat[i, ]
  7. netVisual_circle(mat2, = groupSize, = T,
  8. = max(mat), = rownames(mat)[i])

 

 

 (三)细胞间通讯网络的可视化

1.可视化每个信号通路网络

  1. <- $pathway_name#计算到的所有通路
  2. #如果要选择其中一个信号的话, <- c("TGFb")

(1)层次图可视化信号通路

左侧部分显示对某些感兴趣的细胞(即定义的)的自分泌和旁分泌信号,右侧部分显示对数据集中剩余细胞的自分泌和旁分泌信号,在层次图中,实心圆和空心圆分别代表源和目标。

用户应定义,这是一个数值向量,代表的是感兴趣的细胞类型,比如(1,4)是指在Hierarchy plot中,左侧的感兴趣的细胞群的信号传导,这些感兴趣的细胞群是cellchat@idents里细胞的前四种,也就是里target的前4种。

  1. = seq(1,4)
  2. netVisual_aggregate(cellchat, signaling =[1],
  3. = ,layout = 'hierarchy')

 (2)圈图 边缘颜色与信号发出源一致,边缘权重与交互强度成正比。较粗的边缘线表示较强的信号。在Hierarchy plot 和 Circle plot中,圆圈大小与每个细胞类群中的细胞数成正比。

(3)和弦图 CellChatt提供两种功能netVisual_chord_cell, netVisual_chord_gene用于可视化具有不同目的和不同级别的细胞间通信。netVisual_chord_cell 用于可视化不同细胞群间细胞与细胞通讯(和弦图每个扇区都是一个细胞类群),net_Visual_chord_gene用于可视化由多个配受体或信号通路介导的细胞通讯

  1. # Circle plot
  2. netVisual_aggregate(cellchat, signaling = [1], layout = "circle")
  3. netVisual_aggregate(cellchat, signaling = [1], layout = "chord")

 

 (4)热图,一组热图只能展示一种信号通路

  1. #热图
  2. par(mfrow=c(1,1))
  3. netVisual_heatmap(cellchat, signaling = [1], = "Reds")

 

 2.可视化单个配受体做出的贡献

  1. #配受体展示,以柱状图的形式
  2. p1 <- netAnalysis_contribution(cellchat, signaling = [1],
  3. title = [1])#展现对特定通路的贡献程度
  4. p2 <- netAnalysis_contribution(cellchat, signaling = )#展示所有通路的贡献程度
  5. cowplot::plot_grid(p1, p2, align = "h",ncol=2)
  6. #指定通路画连线图,[1]是指对里的第一种信号通路:FGF信号通路的配受体进行分析

 

3.可视化起显著性作用的配受体

  1. #提取里的第一种信号通路:FGF信号通路的起显著性作用的配受体进行分析
  2. <- extractEnrichedLR(cellchat, signaling = [1],
  3. = FALSE)#提取显著作用的配受体对
  4. <- [1,] # show one ligand-receptor pair
  5. = seq(1,4) # a numeric vector
  6. #signaling = 在所有的信号通路中, = ,FGF信号通路的起显著性作用的配受体的第一对FGF7_FGFR1.
  7. # = seq(1,4) 感兴趣的配体所在的细胞类型是前4种。layout = 'hierarchy'以Hierarchy plot的形式导出。
  8. p3<-netVisual_individual(cellchat, signaling = ,
  9. = , = ,
  10. layout = 'chord')
  11. #差不多的意思,在前7种细胞类型中查看。
  12. = seq(1,7) # a numeric vector
  13. p4<-netVisual_individual(cellchat, signaling = ,
  14. = , = ,
  15. layout = 'circle')

 ​​​​​​​​​​​​​​

 4.可视化多个配受体介导的细胞通讯

(1)气泡图

  1. #以气泡图的形式表示, = 4感兴趣的细胞是第4种类型"Inflam. FIB",靶向细胞是第5到第11种类型。
  2. #作图出来的横坐标是sources细胞和靶向细胞的组合。纵坐标是配受体的组合。颜色深浅代表作用强度,大小代表显著性水平。
  3. p1 <- netVisual_bubble(cellchat, = 4,
  4. = c(5:11), = FALSE)
  5. ## Comparing communications on a single object
  6. p2 <- netVisual_bubble(cellchat, = 4,
  7. = c("cDC1","cDC2","LC","Inflam. DC","TC","Inflam. TC",
  8. "CD40LG+ TC"), = FALSE)
  9. ## Comparing communications on a single object
  10. p3 <-netVisual_bubble(cellchat, = 4,
  11. = c("cDC1","cDC2"), = FALSE)
  12. ## Comparing communications on a single object
  13. #指定信号通路
  14. p4 <-netVisual_bubble(cellchat, = 4,
  15. = c(5:11), signaling = c("CCL","CXCL"),
  16. = FALSE)
  17. ## Comparing communications on a single object
  18. cowplot::plot_grid(p1, p2,p3, align = "h",ncol=4)
  19. #指定信号通路提取配受体
  20. par(mfrow = c(1,3), xpd=TRUE)
  21. #提取在"CCL","CXCL","FGF"信号通路中富集的配体
  22. <- extractEnrichedLR(cellchat, signaling = c("CCL","CXCL","FGF"))
  23. ## interaction_name
  24. ## 1 CCL19_CCR7
  25. ## 2 CXCL12_CXCR4
  26. ## 3 CXCL12_ACKR3
  27. ## 4 FGF7_FGFR1
  28. #气泡图, = c(3,4)感兴趣的细胞类型是第3个和第4个, = c(5:8)靶向的细胞是第5到8个。
  29. # = 感兴趣的配体
  30. p1 <-netVisual_bubble(cellchat, = c(3,4), = c(5:8),
  31. = , = TRUE)
  32. ## Comparing communications on a single object
  33. p2 <-netVisual_bubble(cellchat, = 4, = c(5:11),
  34. signaling = c("CCL","CXCL"), = FALSE)
  35. ## Comparing communications on a single object
  36. p3 <-netVisual_bubble(cellchat, = 4, = c(5:11),
  37. signaling = c("CCL","CXCL"), = T)
  38. ## Comparing communications on a single object
  39. cowplot::plot_grid(p1, p2,p3, align = "h",ncol=3)

 

 

(2)小提琴图 

利用plotGeneExpression绘制与 LR 对或信号通路相关的信号基因的基因表达分布 

plotGeneExpression(cellchat, signaling = "CXCL")

 

 

 默认情况下,plotGeneExpression仅显示与推断的重要通信相关的信号基因的表达。用户可以通过以下方式显示与一个信号通路相关的所有信号基因的表达。

plotGeneExpression(cellchat, signaling = "CXCL",  = FALSE)

 

(3) 散点图

使用散点图在 2D 空间中可视化主要的发送者(源)和接收者(目标)

  1. #首先计算和可视化网络中心性评分
  2. cellchat <- netAnalysis_computeCentrality(cellchat, = "netP") # the slot 'netP' means the inferred intercellular communication network of signaling pathways
  3. # Visualize the computed centrality scores using heatmap, allowing ready identification of major signaling roles of cell groups
  4. netAnalysis_signalingRole_network(cellchat, signaling = , width = 8, height = 2.5, = 10)
  5. gg1 <- netAnalysis_signalingRole_scatter(cellchat)
  6. gg2 <- netAnalysis_signalingRole_scatter(cellchat, signaling = c("CXCL", "CCL"))
  7. gg1 + gg2

 

 

 

报错记录:

Error: not enough space for cells at track index '1'.

 不用慌,清理一下“PLOTS”板块就可以了,是没有足够的空间出图了

  1. Error in (C_convert, x, (whatfrom), (whatto), :
  2. Viewport has zero dimension(s)

没有足够的空间出图,把PLOTS框拉大就好了