SCS【25】单细胞细胞间通信第一部分细胞通讯可视化(CellChat)

news2024/5/18 14:48:10

b8d2fe81c8e930371e8d2d6e00b7c770.gif




桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程,目前整理出来的相关教程目录如下:

Topic 6. 克隆进化之 Canopy

Topic 7. 克隆进化之 Cardelino

Topic 8. 克隆进化之 RobustClone

SCS【1】今天开启单细胞之旅,述说单细胞测序的前世今生

SCS【2】单细胞转录组 之 cellranger

SCS【3】单细胞转录组数据 GEO 下载及读取

SCS【4】单细胞转录组数据可视化分析 (Seurat 4.0)

SCS【5】单细胞转录组数据可视化分析 (scater)

SCS【6】单细胞转录组之细胞类型自动注释 (SingleR)

SCS【7】单细胞转录组之轨迹分析 (Monocle 3) 聚类、分类和计数细胞

SCS【8】单细胞转录组之筛选标记基因 (Monocle 3)

SCS【9】单细胞转录组之构建细胞轨迹 (Monocle 3)

SCS【10】单细胞转录组之差异表达分析 (Monocle 3)

SCS【11】单细胞ATAC-seq 可视化分析 (Cicero)

SCS【12】单细胞转录组之评估不同单细胞亚群的分化潜能 (Cytotrace)

SCS【13】单细胞转录组之识别细胞对“基因集”的响应 (AUCell)

SCS【14】单细胞调节网络推理和聚类 (SCENIC)

SCS【15】细胞交互:受体-配体及其相互作用的细胞通讯数据库 (CellPhoneDB)

SCS【16】从肿瘤单细胞RNA-Seq数据中推断拷贝数变化 (inferCNV)

SCS【17】从单细胞转录组推断肿瘤的CNV和亚克隆 (copyKAT)

SCS【18】细胞交互:受体-配体及其相互作用的细胞通讯数据库 (iTALK)

SCS【19】单细胞自动注释细胞类型 (Symphony)

SCS【20】单细胞数据估计组织中细胞类型(Music)

SCS【21】单细胞空间转录组可视化 (Seurat V5)

SCS【22】单细胞转录组之 RNA 速度估计 (Velocyto.R)

SCS【23】单细胞转录组之数据整合 (Harmony)

SCS【24】单细胞数据量化代谢的计算方法 (scMetabolism)

这期继续介绍细胞通讯分析,CellChat第一部分细胞通讯可视化,下期继续介绍细胞通讯分析具体内容。

555eee72f774e1748847ee936ed255b3.png

简介

理解细胞间的全球通信需要准确地表示细胞信号传导链路并对这些链路进行有效的系统级分析。我们构建了一个数据库的相互作用之间的配体,受体和他们的辅助因子,准确地代表了已知的异质分子复合物。然后,我们开发了CellChat,这是一种能够从单细胞RNA测序(scRNA-seq)数据定量推断和分析细胞间通信网络的工具。CellChat预测细胞的主要信号输入和输出,以及这些细胞和信号如何使用网络分析和模式识别方法协调功能。通过多种学习和定量对比,CellChat对信号通路进行分类,并在不同的数据集上描绘出保守的和特定于环境的通路。将CellChat应用于小鼠和人类皮肤数据集显示其提取复杂信号模式的能力。我们的多功能和易于使用的工具包CellChat和基于网络的浏览器(http://www.cellchat.org/)将有助于发现新的细胞间通信和建立不同组织的细胞-细胞通信图谱。

fa3a231989c0124c2f0e6ed1d2b97207.png

软件包安装

正常安装即可:

install.packages("ggalluvial")
install.packages("expm")
install.packages("sna")
install.packages('NMF')
devtools::install_github("jokergoo/circlize")
devtools::install_github("jokergoo/ComplexHeatmap")
devtools::install_github("sqjin/CellChat")

数据读取

CellChat需要两个用户输入:

  1. 细胞的基因表达数据,

  2. 用户分配的细胞标签(即基于标签的模式)或单细胞数据的低维表示(即无标签模式)。

对于后者,CellChat通过在低维空间或伪时间轨迹空间中基于细胞-细胞距离构建共享邻居图来自动对细胞进行分组。

对于基因表达数据矩阵,基因应该以行命名,细胞应该以列命名。归一化数据(例如,库大小归一化,然后用伪计数1进行对数转换)需要作为CellChat分析的输入。如果提供计数数据,我们提供一个normalizeData函数来考虑库大小,然后进行log转换。对于单细胞组信息,需要一个带有行名的数据框作为CellChat的输入。

library(patchwork)
library(Seurat)
options(Seurat.object.assay.version = "v3")
library(CellChat)
load("data_humanSkin_CellChat.rda")
data.input = data_humanSkin$data # normalized data matrix
meta = data_humanSkin$meta # a dataframe with rownames containing cell mata data
cell.use = rownames(meta)[meta$condition == "LS"] # extract the cell names from disease data

# Prepare input data for CelChat analysis
data.input = data.input[, cell.use]
meta = meta[cell.use, ]
# meta = data.frame(labels = meta$labels[cell.use], row.names = colnames(data.input)) # manually create a dataframe consisting of the cell labels
unique(meta$labels) # check the cell labels
##  [1] Inflam. FIB  FBN1+ FIB    APOE+ FIB    COL11A1+ FIB cDC2        
##  [6] LC           Inflam. DC   cDC1         CD40LG+ TC   Inflam. TC  
## [11] TC           NKT         
## 12 Levels: APOE+ FIB FBN1+ FIB COL11A1+ FIB Inflam. FIB cDC1 cDC2 ... NKT

实例操作

第一部分:CellChat对象的数据输入、处理和初始化

创建一个CellChat对象

cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")
## [1] "Create a CellChat object from a data matrix"
## Set cell identities for the new CellChat object 
## The cell groups used for CellChat analysis are  APOE+ FIB FBN1+ FIB COL11A1+ FIB Inflam. FIB cDC1 cDC2 LC Inflam. DC TC Inflam. TC CD40LG+ TC NKT

将单细胞信息添加到对象中

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
##  [1] "APOE+ FIB"    "FBN1+ FIB"    "COL11A1+ FIB" "Inflam. FIB"  "cDC1"        
##  [6] "cDC2"         "LC"           "Inflam. DC"   "TC"           "Inflam. TC"  
## [11] "CD40LG+ TC"   "NKT"
groupSize <- as.numeric(table(cellchat@idents)) # number of cells in each cell group

设置配体-受体相互作用数据库

CellChatDB <- CellChatDB.human # use CellChatDB.mouse if running on mouse data
showDatabaseCategory(CellChatDB)

5edc5bd74bcd80d5d70e4cdecb7b2928.png

dplyr::glimpse(CellChatDB$interaction)
## Rows: 1,939
## Columns: 11
## $ interaction_name   <chr> "TGFB1_TGFBR1_TGFBR2", "TGFB2_TGFBR1_TGFBR2", "TGFB…
## $ pathway_name       <chr> "TGFb", "TGFb", "TGFb", "TGFb", "TGFb", "TGFb", "TG…
## $ ligand             <chr> "TGFB1", "TGFB2", "TGFB3", "TGFB1", "TGFB1", "TGFB2…
## $ receptor           <chr> "TGFbR1_R2", "TGFbR1_R2", "TGFbR1_R2", "ACVR1B_TGFb…
## $ agonist            <chr> "TGFb agonist", "TGFb agonist", "TGFb agonist", "TG…
## $ antagonist         <chr> "TGFb antagonist", "TGFb antagonist", "TGFb antagon…
## $ co_A_receptor      <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ co_I_receptor      <chr> "TGFb inhibition receptor", "TGFb inhibition recept…
## $ evidence           <chr> "KEGG: hsa04350", "KEGG: hsa04350", "KEGG: hsa04350…
## $ annotation         <chr> "Secreted Signaling", "Secreted Signaling", "Secret…
## $ interaction_name_2 <chr> "TGFB1 - (TGFBR1+TGFBR2)", "TGFB2 - (TGFBR1+TGFBR2)…
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling") # use Secreted Signaling
# set the used database in the object
cellchat@DB <- CellChatDB.use

预处理细胞-细胞通讯分析的表达数据

# subset the expression data of signaling genes for saving computation cost
cellchat <- subsetData(cellchat) # This step is necessary even if using the whole database
future::plan("multicore", workers = 1) # do parallel
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)

第二部分:细胞-细胞通信网络的推论

计算通信概率,推断细胞通信网络

cellchat <- computeCommunProb(cellchat)
## triMean is used for calculating the average gene expression per cell group. 
## [1] ">>> Run CellChat on sc/snRNA-seq data <<< [2023-05-12 16:33:22]"
## [1] ">>> CellChat inference is done. Parameter values are stored in `object@options$parameter` <<< [2023-05-12 16:35:57]"
cellchat <- filterCommunication(cellchat, min.cells = 10)

在信号通路水平推断细胞间的通讯

cellchat <- computeCommunProbPathway(cellchat)

计算聚合细胞-细胞通信网络

cellchat <- aggregateNet(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")

47632b51d9f10587041e1658c6a80b98.png

由于复杂的细胞-细胞通信网络,我们可以检查从每个细胞群发送的信号。这里我们还控制参数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])
}

22af82452dda6635b968770f1ef7a714.png

第三部分:细胞-细胞通信网络的可视化

Hierarchy plot

pathways.show <- c("CXCL") 
# Here we define `vertex.receive` so that the left portion of the hierarchy plot shows signaling to fibroblast and the right portion shows signaling to immune cells 
vertex.receiver = seq(1,4) # a numeric vector. 
netVisual_aggregate(cellchat, signaling = pathways.show,  vertex.receiver = vertex.receiver)

6ea1a45afed0ee91f510796741a67178.png

Circle plot

par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "circle")

556a616f2560f8ca65451e1ca0bb9119.png

# Chord diagram

par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "chord")

52ae5afea68a4f1131bf10516e2cad9c.png

Heatmap

par(mfrow=c(1,1))
netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = "Reds")
## Do heatmap based on a single object

97ac38d48ffabb62e9c1239a6390eeba.png

计算每个配体-受体对整体信号通路的贡献,并可视化由单个配体-受体对介导的细胞-细胞通信

netAnalysis_contribution(cellchat, signaling = pathways.show)

bcd32123b04045c4cdecbaa29f41c342.png

我们还可以可视化单个配体-受体对介导的细胞-细胞通讯。我们提供了extractEnrichedLR功能来提取给定信号通路的所有重要相互作用(L-R对)和相关信号基因。

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")

a604f67a11048e7134c797a4c2bd8084.png

## [[1]]
# Chord diagram
netVisual_individual(cellchat, signaling = pathways.show, pairLR.use = LR.show, layout = "chord")

f81777c9118e3f243704816ece8cc86c.png

## [[1]]

自动保存所有推断网络的绘图,以便快速探索

# Access all the signaling pathways showing significant communications
pathways.show.all <- cellchat@netP$pathways
# check the order of cell identity to set suitable vertex.receiver
levels(cellchat@idents)
##  [1] "APOE+ FIB"    "FBN1+ FIB"    "COL11A1+ FIB" "Inflam. FIB"  "cDC1"        
##  [6] "cDC2"         "LC"           "Inflam. DC"   "TC"           "Inflam. TC"  
## [11] "CD40LG+ TC"   "NKT"
vertex.receiver = seq(1,4)
for (i in 1:length(pathways.show.all)) {
  # Visualize communication network associated with both signaling pathway and individual L-R pairs
  netVisual(cellchat, signaling = pathways.show.all[i], vertex.receiver = vertex.receiver, layout = "hierarchy")
  # Compute and visualize the contribution of each ligand-receptor pair to the overall signaling pathway
  gg <- netAnalysis_contribution(cellchat, signaling = pathways.show.all[i])
  ggsave(filename=paste0(pathways.show.all[i], "_L-R_contribution.pdf"), plot=gg, width = 3, height = 2, units = 'in', dpi = 300)
}

Bubble plot

可视化由多种配体受体或信号通路介导的细胞间通讯

# show all the significant interactions (L-R pairs) from some cell groups (defined by 'sources.use') to other cell groups (defined by 'targets.use')
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), remove.isolate = FALSE)
## Comparing communications on a single object

aaa51c1be08494f54e41a026d86a67a2.png

# show all the significant interactions (L-R pairs) associated with certain signaling pathways
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), signaling = c("CCL","CXCL"), remove.isolate = FALSE)
## Comparing communications on a single object

065b38e0c3e065fafab33d34999ffeec.png

# show all the significant interactions (L-R pairs) based on user's input (defined by `pairLR.use`)
pairLR.use <- extractEnrichedLR(cellchat, signaling = c("CCL","CXCL","FGF"))
netVisual_bubble(cellchat, sources.use = c(3,4), targets.use = c(5:8), pairLR.use = pairLR.use, remove.isolate = TRUE)
## Comparing communications on a single object

2a7f393cdf4c22a8028b354d7fe4cd13.png

violin plot

plotGeneExpression(cellchat, signaling = "CXCL")
## 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.

408399738044cdab7c498b8a96a24dbb.png

Reference

  1. Suoqin Jin et al., Inference and analysis of cell-cell communication using CellChat. Nature Communications, 12:1088 (2021). https://www.nature.com/articles/s41467-021-21246-9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Servlet进阶API、监听器与过滤器

过滤器和监听器是Servlet规范里的两个高级特性&#xff0c; 过滤器的作用是通过对request、response 的修改实现特定的功能&#xff0c;例如请求数据字符编码、IP地址过滤、异常过滤、用户身份认证等。监听器的作用是用于监听Web程序中正在执行的程序&#xff0c; 根据发生的事…

罗德与施瓦茨Rohde Schwarz FSW8 2HZ-8GHZ信号分析仪FSW13收购

罗德与施瓦茨Rohde & Schwarz FSW8 2HZ-8GHZ信号分析仪 附加功能&#xff1a; 10 kHz 偏移&#xff08;1 GHz 载波&#xff09;时的低相位噪声为 –137 dBc (1 Hz) 用于 WCDMA ACLR 测量的 –88 dBc 动态范围&#xff08;带噪声消除&#xff09; 高达 2 GHz 的分析带宽 &…

Camtasia2023.0.1CS电脑录制屏幕动作工具新功能介绍

Camtasia Studio是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等&#xff0c;另外&#xff0c;它还具有即时播放和编 辑压缩的功能&#xff0c;可对视频片段进行剪接、添加转场效果。…

云原生背景下如何配置 JVM 内存

image.png 背景 前段时间业务研发反馈说是他的应用内存使用率很高&#xff0c;导致频繁的重启&#xff0c;让我排查下是怎么回事&#xff1b; 在这之前我也没怎么在意过这个问题&#xff0c;正好这次排查分析的过程做一个记录。 首先我查看了监控面板里的 Pod 监控&#xff1a;…

指令的运行原理及Linux权限解读

目录 一. 指令的运行原理 二. Linux下的用户 2.1 Linux的用户分类 2.2 用户之间的切换 三. 文件权限的概念 3.1 文件类型 3.2 文件的权限 3.3 ls -l 打印文件全部信息的解读 四. 权限的修改 五. 拥有者和所属组的修改 六. 起始权限问题和权限掩码umask 七. 目录文件…

ArcGIS之克里金插值教学

本文来自&#xff1a;GIS科研实验室 基本概念 1.什么是克里金插值&#xff1f; 克里金插值又称空间局部插值法&#xff0c;是以半变异函数理论和结构分析为基础&#xff0c;在有限区域内对区域化变量进行无偏最优估计的一种方法&#xff0c;是地统计学的主要内容之一。南非矿产…

【消息中间件】RocketMQ消息重复消费场景及解决办法

文章目录 前言那么在什么情况下会发生RocketMQ的消息重复消费呢&#xff1f;消息重复消费的场景大概可以分为生产者端重复消费和消费者端重复消费&#xff0c;那么如何来解决消息的重复消费呢&#xff1f;既然在生产者做幂等性的方案都不是特别靠谱&#xff0c;那就再在消费者端…

信创办公–基于WPS的EXCEL最佳实践系列 (宏的录制)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;宏的录制&#xff09; 目录 应用背景操作步骤1、宏的录制启用2、宏的使用3、宏的保存4、宏的禁用 应用背景 宏是一个自动化完成重复性工作的工具&#xff0c;使用宏可以提高我们的工作效率&#xff0c;那应该怎样使用宏这一…

日志与时间戳,客户端与服务器端,打包压缩解压解包介绍,date,cal,zip,unzip,tar指令等

日志与时间戳 计算机世界里面&#xff0c;时间其实很重要的&#xff0c;首先我们需要有日志这个概念&#xff0c;这个日志其实就跟日记一样&#xff0c;那么在日记里面的话就会有时间。时间真的非常关键&#xff0c;比方在出现问题的时候去找到这个问题出现的时间点&#xff0…

EEPROM读写测试实验(主要记录IIC通信协议)

一、简介 EEPROM&#xff0c;电可擦除可编程只读存储器&#xff0c;是一个非易失性的存储器件。RAM&#xff1a; 随机访问存储器&#xff0c;可读也可写&#xff0c;断电不保存数据&#xff0c;常用的RAM有ddr3、SDRAM。ROM仅支持读&#xff0c;不可写&#xff0c;但断电可以保…

4 通道3.2GSPS(或者配置成2 通道6.4GSPS)采样率的12 位AD 采集FMC+子卡模块

板卡概述 FMC_XM134 是一款4 通道3.2GSPS&#xff08;或者配置成2 通道6.4GSPS&#xff09;采样率的12 位AD 采集FMC子卡模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.4 规范&#xff0c;可以作为一个理想的IO 模块耦合至FPGA 前端&#xff0c;射频模拟信号数字化后…

外网远程访问公司内网用友畅捷通T财务软件 - 远程办公

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企业对远程仓库、异地办事处的管理需求&#xff1b;全面满足企业财务业务一体化管理需求。企业一般将其…

老胡的周刊(第090期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 privateGPT[2] 为保证数据私密性&#xff0c…

antd——实现不分页的表格前端排序功能——基础积累

最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是给表格中的某些字段添加排序功能。注意该表格是不分页的&#xff0c;因此排序可以只通过前端处理。 如下图所示&#xff1a; 在antd官网上是有关于表格排序的功能的。 对某一列数据进行排序&#xff0c;通过…

字符串运算公式:muParser公式库在linux平台使用

muParser是一个跨平台的公式解析库,它可以自定义多参数函数,自定义常量、变量及一元前缀、后缀操作符,二元操作符等,它将公式编译成字节码,所以计算起来非常快。 1 、muParser源码下载 官方网址http://sourceforge.net/projects/muparser/ gitee下载地址:Gitee 极速下…

使用国产chatglm推理自己的数据文件_闻达

最近大火的chatgpt&#xff0c;老板说让我看看能不能用自己的数据&#xff0c;回答专业一些&#xff0c;所以做了一些调研&#xff0c;最近用这个倒是成功推理了自己的数据&#xff0c;模型也开源了&#xff0c;之后有机会也训练一下自己的数据。 使用国产chatglm推理自己的数…

【C++】引用重新赋值?

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 前段时间解决了一个关于引用的bug&#xff0c;原因是引用“重新赋值”造成的&#xff0c;原来的代码逻辑关于队列的选择&#xff0c;为了凸显问题&#xff0c;这里使用一个简单的例子重写。示例代码如下&#xf…

第七章 TensorFlow实现卷积神经网络

7.2TensorFlow实现简单的CNN import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from tensorflow.python.framework import ops ops.reset_default_graph()# 创建计算图 sess tf.Ses…

SpringBoot及其配置文件

目录 1.SpringBoot简介 2.第一个SpringBoot项目 3.SpringBoot配置文件 3.1 配置文件介绍 3.2 properties配置文件 3.2.1 properties配置文件——写 3.2.2 properties配置文件——读 3.2.3 properties配置文件——缺点 3.3 yml配置文件 3.3.2 yml配置文件——初阶写 …

RocketMQ入门

文章目录 一. 基本概念1. 概述2. 基本概念3. RocketMQ的特性4. 整体架构 二. RocketMQ整体流程1. 流程图2. 流程介绍 一. 基本概念 1. 概述 RocketMQ 是阿里巴巴在 2012 年开源的分布式消息中间件&#xff0c;目前已经捐赠给 Apache 软件基金会&#xff0c;并于 2017 年 9 月…