一個(gè)對(duì)接CellPhoneDB的R包

首先祝大家新年快樂窟她!新的一年paper多多纳账,順順利利兄旬!

cpplot:
Visualize the results of cell-cell communication analysis based on CellPhoneDB

整理了“TOP生物信息”上面幾篇講解CellPhoneDB的原創(chuàng)帖子幅聘,將其中涉及到的代碼稍加整理得到此R包凡纳。

  • 基于CellPhoneDB的細(xì)胞通訊分析及可視化 (上篇)——2021-07-24發(fā)布
  • 基于CellPhoneDB的細(xì)胞通訊分析及可視化 (下篇)——2021-07-24發(fā)布
  • 【單細(xì)胞高級(jí)繪圖】08.細(xì)胞通訊兩組比較氣泡圖——2022-08-30發(fā)布
  • 【單細(xì)胞高級(jí)繪圖】09.細(xì)胞通訊兩組比較連線圖——2022-08-31發(fā)布

簡(jiǎn)而言之,這個(gè)包對(duì)接的是CellPhoneDB的流程喊暖,跑完CellPhoneDB之后惫企,可能需要畫幾張圖,比如:

  1. 各種細(xì)胞之間互作的數(shù)量關(guān)系
  2. 具體的互作細(xì)節(jié)(什么細(xì)胞之間有什么L-R pair)
  3. 如果有兩個(gè)組都進(jìn)行了CellPhoneDB的分析,如何比較兩組的結(jié)果

下面代碼演示一下

0. 下載并加載R包

最好提前安裝幾個(gè)依賴包:
RColorBrewer, igraph, reshape2, scales, tidyverse, xlsx

devtools::install_github("SiyuanHuang1/cpplot")
library(cpplot)
library(tidyverse)

1. 各種細(xì)胞之間互作的數(shù)量關(guān)系

這一部分狞尔,有三個(gè)函數(shù)可以實(shí)現(xiàn)丛版,分別是:

ccc_number_heatmap1(pfile = "test/pvalues.txt") #ggplot對(duì)象
ccc_number_heatmap2(pfile = "test/pvalues.txt") #ggplot對(duì)象
ccc_number_line(pfile = "test/pvalues.txt",vertex.size = 20) #不是ggplot對(duì)象,不能用ggsave保存

出圖如下:

(圖片的解讀可以參考我最上面提到的幾篇帖子)

image
image
image

2. 具體的互作細(xì)節(jié)

ccc_bubble(
  pfile="./test/pvalues.txt",
  mfile="./test/means.txt",
  # 下面這些是默認(rèn)參數(shù)偏序,可以不變
  # neg_log10_th = -log10(0.05),
  # means_exp_log2_th = 1,
  # notused.cell = NULL,
  # used.cell = NULL,
  # neg_log10_th2 = 3,
  # means_exp_log2_th2 = c(-4, 6),
  # cell.pair = NULL,
  # gene.pair = NULL,
  # color_palette = c("#313695", "#4575B4", "#ABD9E9", "#FFFFB3", "#FDAE61", "#F46D43","#D73027", "#A50026"),
  # text_size = 12
)
image
# 改寫參數(shù)
ccc_bubble(
  pfile="./test/pvalues.txt",
  mfile="./test/means.txt",
  cell.pair=c("Mcell|Scell","Mcell|NKcell","Mcell|Tcell","Scell|Mcell","NKcell|Mcell","Tcell|Mcell"),
  #這里是自定義的順序页畦,若是可選細(xì)胞對(duì)的子集,則只展示子集研儒,若有交集則只展示交集豫缨;空值情況下,會(huì)根據(jù)可選細(xì)胞對(duì)自動(dòng)排序
  gene.pair=c("MIF_TNFRSF14","FN1_aVb1 complex","EGFR_MIF")
  #作用同上
)
image

3. 兩組之間的比較

第1種圖
### 必要參數(shù)
ccc_compare(group1.name = "Old",group2.name = "Young",
            group1.pfile = "cellphonedb/Old/pvalues.txt",group1.mfile="cellphonedb/Old/means.txt",
            group2.pfile="cellphonedb/Young/pvalues.txt",group2.mfile="cellphonedb/Young/means.txt",
            p.threshold = 0.01,thre=1,
            plot.width=105,plot.height=110,filename = "test0121_"
)

### 額外參數(shù)
# 比如端朵,這里我想展示EC細(xì)胞分別充當(dāng)cellA和cellB的圖
# 也可以指定gene pair
ccc_compare(group1.name = "Old",group2.name = "Young",
            group1.pfile = "cellphonedb/Old/pvalues.txt",group1.mfile="cellphonedb/Old/means.txt",
            group2.pfile="cellphonedb/Young/pvalues.txt",group2.mfile="cellphonedb/Young/means.txt",
            p.threshold = 0.05,thre=1,
            #gene.pair = NULL,
            cell.pair=c(
              paste0("EC|",c("APC","SMC","Mac","DC","Neutrophil")),
              paste0(c("APC","SMC","Mac","DC","Neutrophil"),"|EC")
            ),
            plot.width=18,plot.height=30,filename = "test0121b_"
)
image

(圖片的解讀可以參考我最上面提到的幾篇帖子)

第2種圖
ccc_compare2(group1.name = "Old",group2.name = "Young",
             group1.pfile = "cellphonedb/Old/pvalues.txt",group1.mfile="cellphonedb/Old/means.txt",
             group2.pfile="cellphonedb/Young/pvalues.txt",group2.mfile="cellphonedb/Young/means.txt",
             p.threshold = 0.05,thre=0.5,
             cell.pair="EC|APC", #指定ligand產(chǎn)生的細(xì)胞|receptor產(chǎn)生的細(xì)胞
             plot.width=15,plot.height=30,filename = "test0121_"
)

之后會(huì)得到一個(gè)xlsx表格好芭,畫圖會(huì)用到

ccc_line(table.path="test0121_Old2Young.xlsx",ligand.cell="EC",receptor.cell="APC",
         group1.name = "Old",group2.name = "Young",#這五個(gè)參數(shù)和上一步對(duì)應(yīng)
         ligand.color="#4dbbd6",receptor.color="#90d1c1",
         pt.size=6,
         line.thre1=0.5,line.thre2=6,#line.thre1和上一步的"thre"參數(shù)一致,line.thre2可以用來調(diào)整線的粗細(xì)冲呢,值越大舍败,線越細(xì)
         file.name="test0121b_",plot.width=25,plot.height=20)

然后就能得到這張圖:

image

(圖片的解讀可以參考我最上面提到的幾篇帖子)。

第3種圖
ccc_compare2(group1.name = "Old",group2.name = "Young",
             group1.pfile = "cellphonedb/Old/pvalues.txt",group1.mfile="cellphonedb/Old/means.txt",
             group2.pfile="cellphonedb/Young/pvalues.txt",group2.mfile="cellphonedb/Young/means.txt",
             p.threshold = 0.05,thre=0.5,
             cell.pair="EC|APC", #指定ligand產(chǎn)生的細(xì)胞|receptor產(chǎn)生的細(xì)胞
             plot.width=15,plot.height=30,filename = "test0121_"
)

這一步跟第2種圖一樣敬拓。后續(xù)還要找兩組的差異基因

library(Seurat)
testseu=readRDS("testseu.rds")
# 此次演示為了加快運(yùn)行速度邻薯,人為減少了數(shù)據(jù)量,實(shí)際分析中找差異基因不建議這么做
selectedCB=sample(testseu@meta.data$CB,1000)
testseu=testseu%>%subset(CB %in% selectedCB)

# 基于分組找差異基因
marker_group=data.frame()
Idents(testseu)="celltype_age"
for ( ci in c("EC","APC") ) {
  tmp.marker <- FindMarkers(
    testseu, logfc.threshold = 0, min.pct = 0.01,
    only.pos = F, test.use = "wilcox",
    ident.1=paste0(ci,"_Old"),ident.2=paste0(ci,"_Young")
  )
  
  tmp.marker$gene=rownames(tmp.marker)
  tmp.marker$cluster_group=ifelse(tmp.marker$avg_log2FC > 0,paste0(ci,"_Old"),paste0(ci,"_Young"))
  tmp.marker$cluster=ci
  tmp.marker=tmp.marker%>%arrange(desc(avg_log2FC))
  
  marker_group=marker_group%>%rbind(tmp.marker)
}
#本次演示的數(shù)據(jù)集為小鼠數(shù)據(jù)集乘凸,在運(yùn)行cellphonedb時(shí)厕诡,進(jìn)行了基因symbol的轉(zhuǎn)換。
#此處找差異基因得到的symbol為真實(shí)基因名营勤,為了讓兩個(gè)分析匹配灵嫌,DEG表格也應(yīng)該做基因名轉(zhuǎn)換。
#但是為了簡(jiǎn)化冀偶,此處只是簡(jiǎn)單地將小鼠基因名轉(zhuǎn)為大寫醒第,不是很精確。大家在分析的時(shí)候建議嚴(yán)格一點(diǎn)进鸠。
marker_group$gene=marker_group$gene %>% toupper()

然后借助差異基因稠曼,再畫圖

ccc_line2(cpdb.table.path = "test0121_Old2Young.xlsx",marker_group = marker_group,
          ligand.cell = "EC",receptor.cell = "APC",
          group1.name = "Old",group2.name = "Young",
          line.size = 2,file.name = "test0121b_",plot.width = 25,plot.height = 20
)
image

(圖片的解讀可以參考我最上面提到的幾篇帖子)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市客年,隨后出現(xiàn)的幾起案子霞幅,更是在濱河造成了極大的恐慌,老刑警劉巖量瓜,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件司恳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绍傲,警方通過查閱死者的電腦和手機(jī)扔傅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門耍共,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猎塞,你說我怎么就攤上這事试读。” “怎么了荠耽?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵钩骇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我铝量,道長(zhǎng)倘屹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任慢叨,我火速辦了婚禮纽匙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拍谐。我一直安慰自己哄辣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布赠尾。 她就那樣靜靜地躺著,像睡著了一般毅弧。 火紅的嫁衣襯著肌膚如雪气嫁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天够坐,我揣著相機(jī)與錄音寸宵,去河邊找鬼。 笑死元咙,一個(gè)胖子當(dāng)著我的面吹牛梯影,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庶香,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼甲棍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了赶掖?” 一聲冷哼從身側(cè)響起感猛,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奢赂,沒想到半個(gè)月后陪白,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膳灶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年咱士,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡序厉,死狀恐怖锐膜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脂矫,我是刑警寧澤枣耀,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站庭再,受9級(jí)特大地震影響捞奕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拄轻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一颅围、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恨搓,春花似錦院促、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辉浦,卻和暖如春弄抬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宪郊。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工掂恕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弛槐。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓懊亡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乎串。 傳聞我的和親對(duì)象是個(gè)殘疾皇子店枣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容