devtools::install_github("jinworks/CellChat")CellChat了解与使用
CellChat V2版本的使用
1. 细胞通讯分析(CellChat)背景
细胞通讯是指一个信号产生细胞发出的信息通过介质(即配体)传递到另一个靶细胞并与其相应的受体相互作用,然后通过细胞信号转导产生靶细胞内一系列生理生化变化,最终表现为靶细胞整体的生物学效应的过程。

1.1 细胞间相互作用
在生物体中,不同细胞类型和组织中的细胞之间相互作用(CCI)可以协调生物的发育。
CCI通过各种分子包括离子、代谢物、整联蛋白、受体、连接蛋白、结构蛋白、配体和细胞外基质的分泌蛋白来实现的。一些分子如激素、生长因子、趋化因子、细胞因子和神经递质等配体介导细胞之间的信息交流

1.2 细胞通讯类型
自分泌信号转导是指细胞内通讯,细胞分泌配体,这些配体用于通过同源受体诱导同一细胞上表达的那些分子的细胞应答。
旁分泌细胞间的通讯不需要细胞间的接触,而是取决于信号分子在分泌后从一个细胞扩散到另一个细胞
近分泌,即依赖于接触的细胞间通讯依赖于间隙连接或膜纳米管等其他结构,使信号分子直接在细胞之间传递,而不会分泌到细胞外
内分泌细胞间的通讯代表细胞间的通讯,信号分子被分泌并通过诸如血浆的细胞外液传播很长一段距离
细胞间通讯背后的信号转导通常是由各种类型的蛋白质相互作用介导的。包括配体-受体,受体-受体和细胞外基质-受体的相互作用。
受体细胞通过同源受体触发下游信号传导,通常最终导致转录因子活性和基因表达发生改变,从而使这些表达发生改变的细胞进一步与其微环境相互作用。
2. CellChat
单细胞转录组-cellchat细胞通讯
CellChat优势
- 考虑多种subunits/ cofactors/ 聚合物
- 附带注释database并支持可视化结果图
- 支持物种为人或者小鼠
CellChat细胞通讯数据库通过整合KEGG和文献,构建了细胞通讯数据库cellchatDB,数据库主要包括三部分
- 旁分泌、自分泌的信号互作
- 胞外基质-受体互作
- 细胞直接互作
- 除了直接互作的蛋白外,cellchat还将可溶性激动剂、拮抗剂等互作引子考虑在内
2.1 细胞通讯原理
根据细胞表达的配体(Ligand)和受体(Receptor)推断细胞之间是否存在信号传递,并量化其强度。
细胞通讯的可能性通过配受体基因表达量计算,如果配体是复合物,则取表达量的几何平均数,如果受体是复合物,则取表达量的几何平均数。对于受体配体的复合物来说,只要其中一个亚基的表达量为0,则认为这对受体配体对不起作用。
细胞通讯显著性计算采用置换检验来检验每个受体配体的显著性。置换检验的思路为随机置换细胞类群的标签,以此标签计算特定配体受体对的通讯可能性。置换的次数默认为100次,比较置换后的特定配体受体对通讯的可能性和真实的通讯可能性,计算显著性p值。
- 构建Ligand-Receptor 知识库
细胞不能直接说话,必须通过 - 配体(Ligand): 由发送细胞分泌(CXCL12.TGFB1.WNT5A) - 受体(Receptor): 由接收细胞表达(CXCR4,TGFBR1,FZD)
CellChat内置大型人工整理数据库
- 配体-受体二元对(CXCL-CXCR)
- 配体复合物
- 受体复合物
- 多组分信号通路
- 细胞外基质相互作用
- 根据单细胞表达确定”哪些细胞能产生信号”
- 配体的平均表达量
- 受体的平均表达量
- 是否高于表达背景
- 是否满足配体/受体复合体的构建要求
只有显著表达配体的细胞才能作为信号发送端(Sender) 只有显著表达受体的细胞才能作为信号接收端(Receiver)
- 计算每一对细胞之间的信号强度
通讯概率(communication probability)= 配体表达 × 受体表达 × 细胞数量校正 × 通路权重
- 多配体、多受体子单元的最小表达限制
- 结构蛋白复合体的组装概率
- 细胞数量差异校正(避免“大群体压倒一切”的误差)
- 构建完整的细胞通讯网络进行可视化
- 环形图(Circle plot):展示不同细胞之间的通路连接
- 层级图(Hierarchy plot):展示信号的“发送–接收方向性”
- 热图(Heatmap):比较不同细胞间通讯强度
- 气泡图(Bubble plot):展示特定配体–受体在 sender/receiver 的表达组合
- 中心性分析(Centrality analysis):判断哪些细胞是网络中心
- 多样本对比
- 通路富集分析
- 细胞通讯强度变化分析
- 信号网络“主导者”(sender)、“目标”(receiver)、“调节者”(moderator)的识别
| 信号通路类别 | 代表通路(CellChat 中常见) | 主要参与细胞类型 | 核心生物学功能 | 常见研究场景 |
|---|---|---|---|---|
| 趋化与免疫迁移信号 | CXCL、CCL | T 细胞、B 细胞、巨噬细胞、树突状细胞 | 调控免疫细胞迁移、组织定位、炎症反应 | 肿瘤免疫微环境、炎症、自身免疫 |
| 炎症与免疫调节信号 | MIF、TNF、IL1 | 巨噬细胞、单核细胞、肿瘤细胞 | 介导炎症反应、免疫激活或免疫抑制 | 肿瘤、慢性炎症、感染 |
| 免疫检查点 / 抑制信号 | TGF-β、PD-1/PD-L1(部分) | T 细胞、Treg、肿瘤细胞 | 抑制免疫应答、诱导免疫耐受 | 肿瘤免疫逃逸 |
| 生长与分化信号 | WNT、FGF、EGF | 上皮细胞、干细胞、成纤维细胞 | 细胞增殖、分化、干性维持 | 发育生物学、肿瘤发生 |
| 细胞命运决定信号 | NOTCH | 干细胞、免疫细胞 | 决定细胞命运、分化方向 | 发育、免疫分化、肿瘤干性 |
| 血管生成相关信号 | VEGF、ANGPT | 内皮细胞、成纤维细胞 | 血管生成、血管稳定性 | 肿瘤血管、组织修复 |
| 基质与细胞黏附信号 | COLLAGEN、LAMININ、FN1 | 成纤维细胞、上皮细胞、肿瘤细胞 | 细胞黏附、迁移、组织结构维持 | 肿瘤侵袭、纤维化 |
| 整合素介导信号 | INTEGRIN | 成纤维细胞、免疫细胞 | 细胞-基质相互作用、机械信号感知 | ECM 重塑、肿瘤转移 |
| 代谢与应激相关信号 | IGF、HGF | 肿瘤细胞、基质细胞 | 代谢调控、细胞存活 | 肿瘤代谢、组织损伤 |
| 神经-免疫相关信号 | NRG、SEMA | 神经细胞、免疫细胞 | 神经调控、免疫调节 | 神经系统、肿瘤神经浸润 |
| 发育与形态建成信号 | BMP、HEDGEHOG | 干细胞、间充质细胞 | 器官发育、形态建成 | 胚胎发育、再生医学 |
2.2 CellChat 安装
CellChat 在2024年更新到了V2版本,能够
- 从空间分辨转录组学推断相互作用细胞群之间空间邻近的细胞间通讯
- CellChatDB v2 数据库进行了扩展,新增了 1000 多个蛋白质和非蛋白质相互作用(例如代谢和突触信号传导),并附有丰富的注释。此外,还提供了一个名为 updateCellChatDB 的函数,方便用户轻松更新 CellChatDB。
安装最近的CellChat 可以直接在R中使用devtools进行安装
如果网络不行,需要在github中下载 CellChat.zip 文件,然后使用 devtools::install_local安装,但是必须安装对应的依赖包才行
Install NMF (>= 0.23.0)usinginstall.packages('NMF')Install circlize(>= 0.4.12)Install ComplexHeatmap- Install UMAP python pacakge for dimension reduction:
pip install umap-learn
2.3 单个数据集的CellChat完整流程
CellChat官网上有最详细的教程,其他都是看了之后进行再学习的,千人千见,可以自行学习 单数据学习
- Data input & processing and initialization of CellChat object
1.1 Data Load
使用Seurat自带的数据集进行,或者自己的数据集进行

# install data package
if (!requireNamespace("devtools", quietly = TRUE)) install.packages("devtools")
devtools::install_github("satijalab/seurat-data")
library(infb.SeuratData)
library(SeuratData)
InstallData("ifnb")
library(seurat)
# load data
library(ifnb.SeuratData)
data("ifnb")
ifnb <- UpdateSeuratObject(ifnb)
table(ifnb$orig.ident)- 从
Seuratobject 导入数据
data输入使用的是normalized data matrix,所以要根据Seurat版本来决定data的数据层
# seurat V4 data load
data.input <- seurat_object[["RNA"]]@data
# seurat V5 data load
data.input <- GetAssayData(scemerge_sub, assay = "RNA", layer = "data")
# lables
labels <- Idents(seurat_object)
meta <- data.frame(labels = lables, rown.names = names(lables))- 从
SingleCellExperimentobject获取data
data.input <- SingleCellExperiment::logcounts(object)
meta <- as.data.frame(SingleCellExperiment::colData(object))
meta$labels <- meta[["sce.clusters"]]1.2 Create a CellChat object
cellchat can create a new CellChat object from a data matrix, Seurat, SingleCellExperiment or AnnData object,对象中的元数据将默认使用,用户必须提供 group.by 来定义单元格组。例如,group.by = “ident” 表示 Seurat 对象中的默认单元格标识。
CellChat可以从归一化的data创建对象,常规的方法,但是需要补充meta文件,以及设置group.by,当然也提供了从Seurat,SingleCellExperiment,AnnData直接构建cellchat
- Starting from the digital gene expression matrix and cell label information
cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")- Starting from Seurat object
# change Idents
Idents(cellchat) <- "CellType"
# create cellchat
cellChat <- createCellChat(object = seurat.obj, group.by = "ident", assay = "RNA")- Starting from SingleCellExperiment object*
cellChat <- createCellChat(object = sce, group.by = group.by = "sce.clusters")当使用原始数据进行构建cellchat object时候,可以用使用自带的函数
cellchat <- addMeta(cellchat, meta = meta)
cellchat <- setIdent(cellchat, ident.use = "labels") # set "labels" as default cell identity
levels(cellchat@idents) # show factor levels of the cell labels
groupSize <- as.numeric(table(cellchat@idents)) # number of cells in each cell group1.3 Set the ligand-receptor interaction database
在用户能够使用 CellChat 推断细胞间通讯之前,他们需要设置配体-受体相互作用数据库,并识别过度表达的配体或受体。CellChatDB v2 包含约 3300 个经过验证的分子相互作用,其中包括约 40% 的分泌自分泌/旁分泌信号相互作用、约 17% 的细胞外基质 (ECM)-受体相互作用、约 13% 的细胞间接触相互作用以及约 30% 的非蛋白质信号传导。与 CellChatDB v1 相比,CellChatDB v2 新增了 1000 多个蛋白质和非蛋白质相互作用,例如代谢和突触信号传导。
CellChat v2 利用配体和受体的关键介质或酶来估计配体和受体的表达,从而预测非蛋白质介导的潜在通讯。
CellChatDB <- CellChatDB.human # use CellChatDB.mouse if running on mouse data
showDatabaseCategory(CellChatDB)
# Show the structure of the database
dplyr::glimpse(CellChatDB$interaction)
选择自己想依据的数据库,然后把想用的数 据库替换掉cellchat@DB
# use a subset of CellChatDB for cell-cell communication analysis
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling", key = "annotation") # use Secreted Signaling
# Only uses the Secreted Signaling from CellChatDB v1
CellChatDB.use <- subsetDB(CellChatDB, search = list(c("Secreted Signaling"), c("CellChatDB v1")), key = c("annotation", "version"))
# use all CellChatDB except for "Non-protein Signaling" for cell-cell communication analysis
CellChatDB.use <- subsetDB(CellChatDB)
# set the used database in the object
cellchat@DB <- CellChatDB.use1.4 细胞通讯数据预处理
为了推断细胞状态特异性通讯,CellChat 识别一个细胞群中过度表达的配体或受体,然后如果配体或受体过度表达,则识别过度表达的配体-受体相互作用。
提供一个将基因表达数据投影到蛋白质-蛋白质相互作用(PPI)网络上的功能,采用扩散过程,根据基因邻近基因的表达值来平滑基因的表达值,这些邻近基因的表达值是在高置信度的实验验证的蛋白质-蛋白质网络中定义的。当分析测序深度较浅的单细胞数据时,此功能非常有用,因为投影可以减少信号基因的丢失效应,特别是对于配体/受体亚基可能出现的零表达。
library(CellChat)
# subset the expression data of signaling genes for saving computation cost
# This step is necessary even if using the whole database
cellchat <- subsetData(cellchat)
future::plan("multiprocess", workers = 10)
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
# # #> The number of highly variable ligand-receptor pairs used for signaling inference is 692
# project gene expression data onto PPI (Optional: when running it, USER should set `raw.use = FALSE` in the function `computeCommunProb()` in order to use the projected data)
# cellchat <- projectData(cellchat, PPI.human)通过蛋白质-蛋白质相互作用(PPI)网络来优化单细胞数据,从而更准确地推断细胞间的通讯(如配体-受体相互作用)
逻辑:它参考了一个经过实验验证的、高置信度的 PPI 网络
如果基因 A 在某个细胞里表达量为 0,但它在 PPI 网络中的“邻居基因”表达量很高,算法就会根据邻居的表现,给基因 A “补充”一点数值(平滑处理)
默认情况下,CellChat是不使用衍射,如果要启动
- 计算通讯概率之前,先进行投影函数
projectData(cellchat, PPI.human)
- 计算通讯概率之前,先进行投影函数
- 在计算通讯概率的时候,设置
computeCommunProb(object, raw.use = FALSE)
- 在计算通讯概率的时候,设置
小心使用多线程运行,非常容易导致内存爆炸!
- Inference of cell-cell communication network
2.1 Compute the communication probability and infer cellular communication network
CellChat 通过给每次相互作用赋予一个概率值并进行置换检验来推断具有生物学意义的细胞间通讯。CellChat 利用质量作用定律,将基因表达与信号配体、受体及其辅助因子之间相互作用的先验知识相结合,从而模拟细胞间通讯的概率。
在化学中,质量作用定律是指:化学反应的速率与反应物浓度的乘积成正比
- 配体(Ligands): 发出的信号
- 受体(Receptors): 接收的开关
- 辅助因子(Auxiliary factors): 有些信号需要“帮手”才能生效
- 激动剂:增强信号
- 拮抗剂:屏蔽信号
先验知识的作用(Prior Konwledge) 内置数据库
trimean方法: 统计学上非常Robust方法,结合了中位数和四分位数 \[ Trimean = \frac{Q_1 + 2M + Q_3}{4} \]
如果研究的生物过程中众所周知的信号通路没有被预测出来,用户可以尝试使用较低的 trim 值来改变计算每个细胞组平均基因表达的方法。
# 耗时
cellChat <- computeCommunProb(cellChat, type = "triMean")- To use 10% truncated mean, USER can set type = “truncatedMean” and trim = 0.1
- To determine a proper value of trim, CellChat provides a function computeAveExpr, which can help to check the average expression of signaling genes of interest
2.2 将推断出的蜂窝通信网络提取为数据框
我们提供了一个名为 subsetCommunication 的函数,以便轻松访问感兴趣的推断细胞间通讯。
df.net <- subsetCommunication(cellchat)returns a data frame consisting of all the inferred cell-cell communications at the level of ligands/receptors. Set slot.name = “netP” to access the the inferred communications at the level of signaling pathwaysdf.net <- subsetCommunication(cellchat, sources.use = c(1,2), targets.use = c(4,5))gives the inferred cell-cell communications sending from cell groups 1 and 2 to cell groups 4 and 5.df.net <- subsetCommunication(cellchat, signaling = c("WNT", "TGFb"))gives the inferred cell-cell communications mediated by signaling WNT and TGFb.
2.3 Infer the cell-cell communication at a signaling pathway level
CellChat 通过汇总与每个信号通路相关的所有配体-受体相互作用的通信概率,计算信号通路层面的通信概率。每个配体-受体对和每个信号通路的推断细胞间通讯网络分别存储在“net”和“netP”槽中。
cellchat <- computeCommunProbPathway(cellchat)2.4 计算聚合的细胞间通信网络
CellChat 通过计算链路数量或汇总通信概率来计算聚合的小区-小区通信网络。用户还可以通过设置 sources.use 和 targets.use 来计算细胞组子集中的聚合网络。
cellchat <- aggregateNet(cellchat)CellChat can also visualize the aggregated cell-cell communication network. For example, showing the number of interactions or the total interaction strength (weights) between any two cell groups using circle plot.
CellChat也带有可视化的函数
最基础的就是细胞间的网络环状通讯图
groupSize <- as.numeric(table(cellchat@idents))
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")由于细胞间通讯网络的复杂性,我们可以检测每个细胞群发送的信号。此外,我们还控制了参数 edge.weight.max,以便比较不同网络之间的边权重。
mat <- cellchat@net$weight
par(mfrow = c(3,4), xpd=TRUE)
for (i in 1:nrow(mat)) {
mat2 <- matrix(0, nrow = nrow(mat), ncol = ncol(mat), dimnames = dimnames(mat))
mat2[i, ] <- mat[i, ]
netVisual_circle(mat2, vertex.weight = groupSize, weight.scale = T, edge.weight.max = max(mat), title.name = rownames(mat)[i])
}CellChat 数据结构解析,核心仍然是S4 object,使得内部结构更模块化,计算结果更好分层
| Slot 名称 | 数据类型 | 层级 | 含义说明 | 典型用途 |
|---|---|---|---|---|
data |
matrix | 基础数据 | 基因 × 细胞的表达矩阵(通常为 log-normalized) | 通讯推断的原始输入 |
data.signaling |
matrix | 基础数据 | 从 data 中筛选出的信号相关基因(ligand / receptor) |
所有通讯计算的核心数据 |
meta |
data.frame | 元数据 | 细胞注释信息(cell type / sample / condition 等) | 分组、条件比较 |
identities |
factor | 分组 | 实际用于 CellChat 计算的细胞群标签 | 定义 sender / receiver |
DB |
list | 数据库 | 配体–受体–通路数据库(human / mouse) | 通讯注释与映射 |
LR |
data.frame | LR 层级 | 每一个 ligand–receptor 对的通讯结果 | 精细通讯分析 |
net |
list | LR 网络 | 配体–受体层级的细胞通讯网络 | 全局通讯结构 |
net$weight |
matrix | LR 网络 | 加权通讯强度矩阵(sender × receiver) | 圆图、网络图 |
net$count |
matrix | LR 网络 | 通讯对数量矩阵 | 通讯数量比较 |
net$prob |
matrix | LR 网络 | 平均通讯概率 | 定量分析 |
net$pval |
matrix | LR 网络 | permutation 检验 p 值 | 显著性筛选 |
netP |
list | 通路网络 | 信号通路层级的通讯结果 | 通路级分析 |
netP$pathways |
character | 通路网络 | 被检测到的信号通路名称 | 通路筛选 |
netP$probability |
matrix | 通路网络 | 通路级通讯强度矩阵 | hierarchy / river / bubble |
var.features |
character | 特征 | 高变信号相关基因 | 降噪、加速 |
options |
list | 参数 | 分析参数(permutation 次数等) | 结果复现 |
images |
list | 可视化 | 保存的 ggplot 图像对象 | 结果复用 |
- data/meta/identities 都是
createCellChat()这一步加入进去的 - DB 是
subsetDB()加入进入的 - data.signaling 是添加数据库后中,使用
subsetData()加入的 - LR推断,是
computeCommunProb()得到的结果 - net slot是
computeCommunProb()产生的结果 - netP slot是
computeCommunProbPathway()LR到pathway的映射 - images 是可视化的存储
- Visualization of cell-cell communication network
在推断出细胞间通信网络后,CellChat 提供了多种功能,用于进一步的数据探索、分析和可视化。
- hierarchical plot, circle plot, Chord diagram, and bubble plot.
- 分离和可视化高顺位的细胞网络推断信息
3.1 Visualize each signaling pathway using Hierarchy plot, Circle plot or Chord diagram
Hierarchy plot: 层级图/分层图 (用来展示“层级关系(父–子关系)或嵌套结构”的可视化图形,强调从整体到局部的组织结构,而不是数值变化趋势) 用户应定义 vertex.receiver,这是一个数值向量,表示层次结构图左侧目标单元格组的索引。该层级图由两部分组成:左侧部分显示了对特定目标细胞群(即定义的顶点接收器)的自分泌和旁分泌信号,右侧部分显示了对数据集中其余细胞群的自分泌和旁分泌信号。
不是基因编号、不是细胞数量,而是 CellChat 里 cell group 的编号 vertex.receiver = “谁是信号的接收方(receiver)”
Chord diagram: 弦图, cellchat 提供了netVisual_chord_cell 和 netVisual_chord_gene 可视化不同目的和水平的细胞通讯,netVisual_chord_cell用来可视化不同细胞组之间的细胞通讯,netVisual_chord_gene 用来可视化多种受体-配体的细胞通讯,用于可视化由多个配体-受体或信号通路介导的细胞间通讯(其中弦图中的每个扇形代表一个配体、受体或信号通路)
Explnations of edge color/weight, node color/size/shape: 在所有可视化图中,边的颜色与发送者的来源一致,边的权重与交互强度成正比。
Visualization of cell-cell communication at different levels:可以使用 netVisual_aggregate 可视化推断的信号通路通信网络,并使用 netVisual_individual 可视化与该信号通路相关的单个 L-R 对的推断通信网络。
CellChat 数据分析包中,vertex.receiver 是一个非常有用的参数,它决定了在生成的聚合细胞通讯网络图中,哪些细胞群体(clusters)被作为接收者(Receivers)进行重点展示。
# pathway
print(cellChat@netP[["pathways"]])
# index
levels(cellChat@idents)
# seting pathway
pathways.show <- c("DESMOSOME")
# Hierarchy plot
vertex.receiver = c(1,4,6,11)
netVisual_aggregate(cellchat, signaling = pathways.show, vertex.receiver = vertex.receiver)
# Chord diagram
par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "chord")
# Heatmap
netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = "Reds")计算每个配体-受体对整个信号通路的贡献,并可视化由单个配体-受体对介导的细胞间通讯。
netAnalysis_contribution(cellchat, signaling = pathways.show)还可以可视化由单个配体-受体对介导的细胞间通讯。提供了一个名为 extractEnrichedLR 的函数,用于提取给定信号通路中所有显著的相互作用(配体-受体对)及其相关的信号基因。
pairLR.CXCL <- extractEnrichedLR(cellchat, signaling = pathways.show, geneLR.return = FALSE)
LR.show <- pairLR.CXCL[1,] # show one ligand-receptor pair
# Hierarchy plot
vertex.receiver = seq(1,4) # a numeric vector
netVisual_individual(cellchat, signaling = pathways.show, pairLR.use = LR.show, vertex.receiver = vertex.receiver)
#> [[1]]
# Circle plot
netVisual_individual(cellchat, signaling = pathways.show, pairLR.use = LR.show, layout = "circle")2.4 使用 CellChat 对多个数据集进行比较分析
- 多样本cellchat的构建
按照之前单样本的分析方式,进行list循环构建cellchat的对象,然后进行多样本的分析
sub_cellchat.list <-lapply(sub_cc.lst, function(sample){
cellchat <- createCellChat(object = sample, group.by = "ident",assay = "RNA")
## database
cellChatDB <- CellChatDB.human
CellChatDB.use <- subsetDB(cellChatDB)
cellchat@DB <- CellChatDB.use
## subset
cellchat <- subsetData(cellchat)
# over expression gene
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
# caculate
cellchat <- computeCommunProb(cellchat, type = "triMean")
cellchat <- computeCommunProbPathway(cellchat)
cellchat <- aggregateNet(cellchat)
return(cellchat)
})
names(sub_cellchat.list) <- names(sub_cc.lst)Seurat list 的分离,可以使用subset,也可以使用Seurat自带的 splitobject,但是splitobject 分离之后会导致metadata只剩下原始数据
合并生成的list,构建cellchat文件
cellchat <- mergeCellChat(sub_cellchat.list, add.names = names(sub_cellchat.list))
#> Merge the following slots: 'data.signaling','images','net', 'netP','meta', 'idents', 'var.features' , 'DB', and 'LR'.
cellchat
#> An object of class CellChat created from a merged object with multiple datasets
#> 593 signaling genes.
#> 7563 cells.
#> CellChat analysis of single cell RNA-seq data!- 识别改变的相互作用和细胞群
CellChat采用自上而下的方法,即从整体入手,然后逐步细化信号传导机制,以识别不同层面的信号变化,包括相互作用的改变、细胞群的变化、信号通路的变化以及配体-受体对的变化。
- 是否细胞通讯提升或没有提升
- 细胞之间的通讯是否改变
- 主要的变化是什么
1.1 比较交互作用总数和交互作用强度
ptm = Sys.time()
gg1 <- compareInteractions(cellchat, show.legend = F, group = c(1,2))
gg2 <- compareInteractions(cellchat, show.legend = F, group = c(1,2), measure = "weight")
gg1 + gg21.2 比较不同细胞群之间的相互作用数量和相互作用强度
为了确定哪些细胞群显示出显著变化,CellChat 使用差异相互作用的圆图(选项 A)、差异相互作用的热图(选项 B)和每个数据集的相互作用数量或相互作用强度的两个圆图(选项 C)来比较不同细胞群之间的相互作用数量和相互作用强度。
- 圆形图显示了两个数据集中不同细胞群之间相互作用的数量或相互作用强度的差异。
par(mfrow = c(1,2), xpd=TRUE)
netVisual_diffInteraction(cellchat, weight.scale = T)
netVisual_diffInteraction(cellchat, weight.scale = T, measure = "weight")- 热图显示了两个数据集中不同细胞群之间相互作用的数量或相互作用强度的差异
gg1 <- netVisual_heatmap(cellchat)
#> Do heatmap based on a merged object
gg2 <- netVisual_heatmap(cellchat, measure = "weight")
#> Do heatmap based on a merged object
gg1 + gg2- 圆形图显示了多个数据集中不同细胞群之间的相互作用数量或相互作用强度
weight.max <- getMaxWeight(object.list, attribute = c("idents","count"))
par(mfrow = c(1,2), xpd=TRUE)
for (i in 1:length(object.list)) {
netVisual_circle(object.list[[i]]@net$count, weight.scale = T, label.edge= F, edge.weight.max = weight.max[2], edge.width.max = 12, title.name = paste0("Number of interactions - ", names(object.list)[i]))
}