细胞通讯(CellChat)高级配受体气泡图

简介

cellphoneDB 是最常见的进行细胞通讯分析的工具,但是其分析所需环境较为复杂而且容易产生各类报错。目前常用的细胞通讯分析还有CellChat,一款使用更容易且可视化结果更方便的R包(https://github.com/sqjin/CellChat)。
利用cellchat的结果复现下面这张图

image.png

(Wang, W. et al. Single-cell profiling identifies mechanisms of inflammatory heterogeneity in chronic rhinosinusitis. Nat. Immunol. 23, 1484-1494 (2022).)

方法

·cellchat 结果得到配受体数据
·ggplot绘制中间的连线图
·dotplot绘制两侧的气泡图
·patchwork进行拼图/AI拼图

实战

1.挑选配受体对

## 1.1挑选合适通路 ----
library(Seurat)
library(CellChat)
library(patchwork)
outdir <- './results/files/'
outdir2 <- './results/plots/'
# 读取cellchat对象
cellchat <- readRDS('cellchat.rds')
table(cellchat@meta$labels)#查看有哪些细胞类型
## 挑选细胞类型和关注的通路
pdf(file = paste0(outdir2, 'dotployt_inflammation.pdf'),width=20, height= 5)
sources = c(20:25)#设置sources cells对应的位置顺序
targets = c(1:25)#设置target cells的
p <- netVisual_bubble(cellchat, sources.use = sources, targets.use = targets,  
                 signaling = c('MIF', 'CLEC', 'ICAM', 'CCL', 'CXCL', 'BAFF'),#关注的通路
                  angle.x = 90)
p
dev.off()
image.png

由于我们绘制的连线图需要发出和接受细胞分别对应的配受体基因,所以我们利用上面图中的数据来提取并整理成我们想要的数据类型,便于后续画图。

## 1.2提取数据 ----
# 提取画图数据
LR_data <- p[["data"]][,1:4]
LR_data <- LR_data[!is.na(LR_data$ligand), ] 
table(LR_data$ligand)
# CCL5   CD69   CLEC2B   CLEC2D   CXCL16    ICAM1    ICAM2  MIF  TNFSF13B
table(LR_data$receptor)
# CCR1  CD74_CD44  CD74_CXCR4   CXCR6   ITGAL ITGAL_ITGB2 ITGAM_ITGB2 ITGAX_ITGB2  KLRB1 SPN   TNFRSF13B   TNFRSF13C
# 更改信息,复杂的受体只保留后者
LR_data$receptor <- gsub('CD74_CD44', 'CD44', LR_data$receptor)
LR_data$receptor <- gsub('CD74_CXCR4', 'CXCR4', LR_data$receptor)
LR_data$receptor <- gsub('ITGAL_ITGB2', 'ITGB2', LR_data$receptor)
LR_data$receptor <- gsub('ITGAM_ITGB2', 'ITGB2', LR_data$receptor)
LR_data$receptor <- gsub('ITGAX_ITGB2', 'ITGB2', LR_data$receptor)
table(LR_data$ligand)
# CCL5   CD69   CLEC2B   CLEC2D   CXCL16    ICAM1    ICAM2  MIF  TNFSF13B  #9
table(LR_data$receptor)
# CCR1   CD44  CXCR4   CXCR6  ITGAL ITGB2  KLRB1  SPN   TNFRSF13B   TNFRSF13C  
write.table(LR_data, file = file.path(outdir, "LR_data.csv"),
            quote = F, sep = ",", row.names = T)

绘制连线图参考了该帖子(https://mp.weixin.qq.com/s/4YZCqCRF21XepavYTNtbUg),数据需要整理成下面这种格式,即每个对应的配受体放在同一行;每个配体/受体都有确定的顺序,目的是和气泡图的基因相对应起来(避免混淆可以直接按照默认的字母顺序)

image.png

# 整理数据
data <- data.frame(sou=LR_data$ligand,
                    x1=rep(2,length(LR_data$ligand)),
                    net_y1='',
                    tar=LR_data$receptor,
                    x2=rep(3,length(LR_data$receptor)),
                    net_y2='')
colnames(LR_data_name) <- c('sou', 'number')
# 找到 LR_data_name 中 sou 对应的行索引
match_indices <- match(data$sou, LR_data_name$sou)
# 将 LR_data_name 中对应行的 num 列的值赋给 LR_data 中的 net_y1 列
data$net_y1 <- LR_data_name$num[match_indices]
# 同理
colnames(LR_data_name) <- c('tar', 'number')
match_indices <- match(data$tar, LR_data_name$tar)
data$net_y2 <- LR_data_name$num[match_indices]
data <- unique(data)
write.table(data, file = file.path(outdir, "data_dotplot.csv"),
            quote = F, sep = ",", row.names = T)

2.绘制连线图

## 连线图
p2 <- ggplot(data)+
  geom_segment(aes(x1,net_y1,xend=x2,yend=net_y2),
               size=0.5,color=c('black','black','black','black','#CC0033',
                                'black','black','black','black','black',
                                'black','black','black'))+#虚线 ,linetype = "dashed"
#设置了红色为了突出显示某个配受体对
  geom_point(aes(x=x1,y=net_y1),size=1, fill="#3cb346", color="#3cb346",
             stroke=1, shape = 21)+
  geom_point(aes(x=x2,y=net_y2),size=1, fill="#44c1f0", color="#44c1f0",
             stroke=1, shape = 21)+
  scale_y_continuous(limits = c(1, 10),expand = expansion(add=c(0.5,0.7)))+
  scale_x_continuous(expand = expansion(0,0.1))+
  theme_void()
p2

ggsave(file.path(outdir2, 'mid_line.pdf'), 
       p2, width = 2, height = 5)

结果如下:


image.png

3.绘制气泡图

两侧气泡图的绘制比较简单,就是简单的dotplot,调整主题颜色和坐标位置等参数即可,但是原图中气泡的边框设置了颜色,并且气泡间有连线,这个方法我没有找到(欢迎补充!)

## 3.1左侧
features_1 <- c(LR_data_name$genes[1:9])
p1 <- DotPlot(object = seurat_obj[, seurat_obj[["cell_type"]] == c('NK CD56highCD16low', 'NK CD56lowCD16high', 'CD14+ Monocytes',  'CD14+CD16+ Monocytes', 'CD16+ Monocytes',  'Dendritic cells' )], #可以用全部的细胞类型,也可以挑选一部分
              features = features_1, assay = "RNA") +
  guides(color = guide_colorbar(title = 'Average  Expression')) +
  scale_color_gradientn(colours = c('white','grey',"black"))+#主题颜色 
  coord_flip() +
  theme(axis.title = element_blank(),#标题为空
        legend.position = "left",
        plot.margin = unit(c(0.5,0,0.5,0.5), 'cm'),
        axis.line = element_blank(),#去除坐标轴线
        axis.ticks = element_line(size = 0.2),#刻度线
        panel.border = element_rect(color = "black",fill=NA, size = 0.1),#图形边框
        panel.grid.major = element_line(size = 0.1,color = 'black',linetype = 2),# 显示主网格线
        axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=0.1)) +#坐标轴字体
  scale_x_discrete(position = "top") + scale_y_discrete(position = "right")
p1
ggsave(file.path(outdir2, 'left_target.pdf'), 
       p1, width = 4.5, height = 5.5)

## 3.2右侧
features_2 <- c(LR_data_name$genes[10:19])
p3 <- DotPlot(object = seurat_obj, features = features_2, assay = "RNA") +
  guides(color = guide_colorbar(title = 'Average  Expression')) +
  scale_color_gradientn(colours = c('white','grey',"black"))+#主题颜色 
  coord_flip() +
  theme(axis.title = element_blank(),
        plot.margin = unit(c(0.5,0.5,0.5,0), 'cm'),
        axis.line = element_blank(),#去除坐标轴线
        axis.ticks = element_line(size = 0.2),#刻度线
        panel.border = element_rect(color = "black",fill=NA, size = 0.1),#图形边框
        panel.grid.major = element_line(size = 0.1,color = 'black',linetype = 2),# 显示主网格线
        axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=0.1)) +
  scale_y_discrete(position = "right")  + 
  NoLegend()
p3
ggsave(file.path(outdir2, 'right_source.pdf'), 
       p3, width = 7, height = 6)
image.png
image.png

后续进行拼图即可得到类似的结果~


image.png

(每帖分享:不去美化自己没走过的路,要去创造美好)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容