④-1单细胞学习-cellchat单数据代码补充版

时间:2024-12-10 21:54:20

目录

1,数据输入及处理

①载入包和数据

②CellChat输入数据准备

③构建CellChat对象

④数据预处理

2,细胞通讯预测

①计算细胞通讯概率

②提取配受体对细胞通讯结果表

③提取信号通路水平的细胞通讯表

④细胞互作关系可视化

1)细胞亚群间配受体数目网络图

2)细胞亚群间配受体概率/强度网络图

3)每个细胞亚群的配受体通讯概率进行单独展示

​编辑4)数量和强度弦图合并

3,信号通路水平的细胞通讯分析

4,信号通路相关配受体对水平的细胞通讯分析

5,多个配受体对/信号通路水平介导的细胞通讯可视化

①指定信号通路

②参与目标信号通路的基因在各细胞亚群的表达分布展示

③气泡图

1,数据输入及处理
①载入包和数据

官方学习:focuslyj/CellChat - 码云 - 开源中国 ()

这里提供的应该是counts data数据

  1. rm(list=ls())
  2. library(CellChat)
  3. library(patchwork)
  4. library(ggplot2)
  5. library(Seurat)
  6. library(ggalluvial)#绘制桑基图
  7. library(expm)
  8. library(sna)
  9. library(NMF)
  10. options(stringsAsFactors = FALSE)##输入数据不自动转换成因子(防止数据格式错误)
  11. load("data_humanSkin.Rdata")#数据加载:这里是count data数据
CellChat输入数据准备
  1. #需标准化的基因表达量矩阵和细胞分组信息文件
  2. #不同输入格式处理方式不同
  3. data.input = data_humanSkin$data#需标准化的基因表达量矩阵和细胞分组信息文件
  4. meta = data_humanSkin$meta
  5. data.input[1:6,1:3]#表达count
  6. head(meta);table(meta$condition) #含normal(NL)和diseases(LS)
  7. cell.use = rownames(meta)[meta$condition == 'LS'] #提取LS的细胞名称
  8. data.input = data.input[, cell.use]#提取LS表达矩阵
  9. meta = meta[cell.use, ]#提取LS细胞信息
  10. identical(rownames(meta),colnames(data.input)) #检查矩阵列名和分组文件行名是否一致
  11. unique(meta$labels) #检查细胞亚群标签类型
构建CellChat对象
  1. #接下来构建CellChat对象
  2. cellchat <- createCellChat(object = data.input, #支持normalized表达矩阵,Seurat对象,和SingleCellExperiment对象
  3. meta = meta, #meta文件
  4. group.by = 'labels') #meta中的细胞分类列
  5. #cellchat <- addMeta(cellchat, meta = meta)#创建CellChat对象未 cellmeta信息时添加信息
  6. cellchat <- setIdent(cellchat, ident.use = 'labels') #将label设置为显示的默认顺序
  7. levels(cellchat@idents) #查看celltype和factor顺序
  8. table(cellchat@idents) #每个celltype中的细胞数
  9. #设置配受体数据库(CellChatDB):
  10. CellChatDB <- #() ()
  11. showDatabaseCategory(CellChatDB) #查看描述该数据库组成的饼状图
  12. dplyr::glimpse(CellChatDB$interaction) #查看数据库结构
  13. #直接使用CellChatDB全库进行细胞通讯分析:
  14. ##CellChatDB.use <- CellChatDB # simply use the default CellChatDB
  15. #选择数据库中特定子集进行细胞通讯分析:
  16. CellChatDB.use <- subsetDB(CellChatDB,
  17. search = 'Secreted Signaling') #可选择Secreted Signaling、ECM-Receptor或Cell-Cell Contact
  18. cellchat@DB <- CellChatDB.use#将数据库添加到CellChat对象中(DB)
数据预处理
  1. #数据预处理;信号基因的表达矩阵子集化,节省计算成本
  2. cellchat <- subsetData(cellchat) #必选的step,取上一步中信号基因的表达矩阵子集,赋值到cellchat@data.Signaling
  3. #future::plan('multiprocess', workers = 4) # do parallel (可以不用选择平行计算)
  4. #鉴定与每个细胞亚群相关的过表达信号基因:基于表达该基因的细胞比例、差异倍数和p值判定。
  5. cellchat <- identifyOverExpressedGenes(cellchat,
  6. = TRUE, #仅返回positive markers
  7. = 0, #细胞比例阈值
  8. = 0, #差异倍数
  9. = 0.05) #P-Value
  10. #计算结果赋值到cellchat@var.features:
  11. head(cellchat@var.features$features) #过表达信号基因名
  12. head(cellchat@var.features$features.info) #差异计算结果表
  13. #识别过表达基因配体-受体互作:
  14. cellchat <- identifyOverExpressedInteractions(cellchat)
  15. head(cellchat@LR$LRsig) #计算结果赋值位置
  16. #将基因表达数据映射到PPI网络(可跳过):
  17. cellchat <- projectData(cellchat, PPI.human) #返回结果:cellchat@data.project
2,细胞通讯预测
①计算细胞通讯概率
  1. #细胞通讯预测##############################################
  2. cellchat <- computeCommunProb(cellchat, raw.use = TRUE) #返回结果:cellchat@options$parameter
  3. ##默认使用原始表达数据(cellchat@data.Signaling),若想使用上一步PPI矫正数据,设置raw.use = TALSE
  4. cellchat <- filterCommunication(cellchat, = 10) #细胞通讯过滤(设置每个亚群中进行细胞间通讯所需的最小细胞数)
提取配受体对细胞通讯结果表
  1. #提取配受体对细胞通讯结果表:
  2. <- subsetCommunication(cellchat, = 'net')
  3. head() #得到配受体对细胞通讯结果表
  4. #或访问其它感兴趣/特定的细胞通讯结果:
  5. 1 <- subsetCommunication(cellchat,
  6. sources.use = c('LC'),
  7. targets.use = c('FBN1+ FIB')) #访问特定细胞对子集
  8. head(1)
  9. 2 <- subsetCommunication(cellchat, signaling = c('CD40')) #访问特定信号通路子集
  10. head(2)
提取信号通路水平的细胞通讯表

提取配受体对细胞通讯结果表:subsetCommunication函数

提取信号通路水平的细胞通讯表:computeCommunProbPathway函数

  1. #提取信号通路水平的细胞通讯表:
  2. cellchat <- computeCommunProbPathway(cellchat) #计算信号通路水平上的通讯概率
  3. df.netp <- subsetCommunication(cellchat, = 'netP') #得到信号通路水平细胞通讯表
  4. head()
细胞互作关系可视化
1)细胞亚群间配受体数目网络图
  1. cellchat <- aggregateNet(cellchat)#计算细胞对间通讯的数量和概率强度
  2. #不同细胞亚群间的互作数量与概率/强度可视化:
  3. groupSize <- as.numeric(table(cellchat@idents))##细胞亚群间配受体数目网络图:
  4. par(mfrow = c(1,1), xpd = TRUE)
  5. netVisual_circle(cellchat@net$count,
  6. = groupSize,
  7. = T,
  8. = F,
  9. = 'Number of interactions')

细胞通讯| 基础分析教程_哔哩哔哩_bilibili

2)细胞亚群间配受体概率/强度网络图
  1. ##细胞亚群间配受体概率/强度网络图:
  2. par(mfrow = c(1,1), xpd = TRUE)
  3. netVisual_circle(cellchat@net$weight,
  4. = groupSize,
  5. = T,
  6. = F,
  7. = 'Interaction weights/strength')

3)每个细胞亚群的配受体通讯概率进行单独展示

这里需要注意R绘图画板范围,可以将前面的绘图进行保存和devoff后再进行作图

  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, = max(mat), = rownames(mat)[i])
  8. }
4)数量和强度弦图合并
  1. #数量和强度弦图合并
  2. par(mfrow = c(1,2), xpd = TRUE)
  3. netVisual_circle(cellchat@net$count,
  4. = groupSize,
  5. = T,
  6. = F,
  7. = 'Number of interactions')
  8. netVisual_circle(cellchat@net$weight,
  9. = groupSize,
  10. = T,
  11. = F,
  12. = 'Interaction weights/strength')

  1. #保存cellchat对象:
  2. save(cellchat, groupSize, file = c('humanSkin_CellChat.Rdata'))

3,信号通路水平的细胞通讯分析
  1. cellchat@netP$pathways##信号通路查看
  2. <- c('GALECTIN')##以'GALECTIN'信号通路展示为例
  3. #层级图(Hierarchy plot)绘制
  4. levels(cellchat@idents)#查看细胞亚群及factor顺序:
  5. #选择其中感兴趣的细胞亚群:
  6. = c(3,8,9,10)#为画图第一列的source
  7. par(mfrow = c(1,1))
  8. netVisual_aggregate(cellchat,
  9. layout = c('hierarchy'), #"circle", "hierarchy", "chord"
  10. signaling = ,
  11. = )#选择展示的通路

别的图

  1. par(mfrow = c(1,1))#展示网络图
  2. netVisual_aggregate(cellchat,
  3. layout = c('circle'),
  4. signaling = )
  5. par(mfrow=c(1,1))#展示弦图
  6. netVisual_aggregate(cellchat,
  7. layout = c('chord'),
  8. signaling = )
  9. par(mfrow=c(1,1))#展示热图
  10. netVisual_heatmap(cellchat,
  11. signaling = ,
  12. = c("white", "#b2182b"))

4,信号通路相关配受体对水平的细胞通讯分析
  1. netAnalysis_contribution(cellchat,
  2. signaling = ) #配受体对贡献条形图
  3. <- extractEnrichedLR(cellchat, #提取细胞对
  4. signaling = ,
  5. geneLR.return = FALSE)
  6. <- [1,] #以贡献度top1的配受体对为例
  7. ;

别的图

  1. netVisual_individual(cellchat,#Hierarchy plot:
  2. layout = c('hierarchy'),
  3. signaling = , #目标信号通路
  4. pairLR.use = , #目标配受体对
  5. = ) #感兴趣的细胞亚群
  6. #Circle plot:
  7. netVisual_individual(cellchat,
  8. layout = c('circle'),
  9. signaling = ,
  10. pairLR.use = )
  11. #Chord diagram:
  12. netVisual_individual(cellchat,
  13. layout = c('chord'),
  14. signaling = ,
  15. pairLR.use = )

5,多个配受体对/信号通路水平介导的细胞通讯可视化
指定信号通路
  1. 多个配受体对/信号通路水平介导的细胞通讯可视化######
  2. levels(cellchat@idents)#指定信号通路
  3. netVisual_bubble(cellchat,
  4. sources.use = 4,
  5. targets.use = c(5:11),
  6. signaling = c("CCL","CXCL"), #指定CCL和CXCL两个信号通路
  7. = FALSE)
  8. #指定配受体对:
  9. pairLR.use <- extractEnrichedLR(cellchat,
  10. signaling = c("CCL","CXCL","FGF")) #确定在目标信号通路中有重要作用的配受体对
  11. pairLR.use
  12. netVisual_bubble(cellchat,
  13. sources.use = 4,
  14. targets.use = c(5:11),
  15. pairLR.use = pairLR.use,#指定的受体对
  16. = TRUE)

②参与目标信号通路的基因在各细胞亚群的表达分布展示
  1. #参与目标信号通路的基因在各细胞亚群的表达分布展示:
  2. plotGeneExpression(cellchat, signaling = 'GALECTIN',
  3. type = 'violin') #小提琴图

③气泡图
  1. plotGeneExpression(cellchat,
  2. signaling = 'GALECTIN', type = 'dot', color.use = c("white", "#b2182b")) #气泡图