單細(xì)胞分析實(shí)錄(9): 展示marker基因的4種圖形(二)

在上一篇中,我已經(jīng)講解了展示marker基因的前兩種圖形,分別是tsne/umap圖踢京、熱圖,感興趣的讀者可以回顧一下宦棺。這一節(jié)我們繼續(xù)學(xué)習(xí)堆疊小提琴圖和氣泡圖瓣距。

3. 堆疊小提琴圖展示marker基因

相比于其他可視化形式,小提琴圖可以更直觀地展示某一類亞群的某一個(gè)基因的表達(dá)分布情況代咸。我的marker基因一共選了12個(gè)蹈丸,下面來畫圖:
Seurat內(nèi)置的VlnPlot函數(shù)可以直接畫,

library(xlsx)
markerdf2=read.xlsx("ref_marker2.xlsx",sheetIndex = 1)
markerdf2$gene=as.character(markerdf2$gene)

mye.seu=readRDS("mye.seu.rds")
mye.seu$celltype=factor(mye.seu$celltype,levels = sort(unique(mye.seu$celltype)))
Idents(mye.seu)="celltype"

VlnPlot(mye.seu, features = markerdf2$gene, pt.size = 0, ncol = 1)+
  scale_x_discrete("")+
  theme(
    axis.text.x.bottom = element_blank()
  )
ggsave("vln1.pdf",width = 20,height = 80,units = "cm")

其中pt.size參數(shù)表示點(diǎn)的大小呐芥,一個(gè)點(diǎn)就是一個(gè)細(xì)胞逻杖,一般可以直接設(shè)置為0,即不顯示點(diǎn)思瘟,只畫小提琴荸百,看上去更加清楚。盡管此處我對(duì)標(biāo)度和主題進(jìn)行了調(diào)整滨攻,但我發(fā)現(xiàn)這只對(duì)單個(gè)feature有用够话,多個(gè)feature時(shí)就不起作用了蓝翰,后續(xù)就用AI來簡(jiǎn)單編輯一下吧。
需要注意的是女嘲,圖的顏色是根據(jù)亞群的類別來劃分的畜份,并不是根據(jù)基因來區(qū)分。

file

第二種方法欣尼,ggplot2代碼如下

library(reshape2)
vln.df=as.data.frame(mye.seu[["RNA"]]@data[markerdf2$gene,])
vln.df$gene=rownames(vln.df)
vln.df=melt(vln.df,id="gene")
colnames(vln.df)[c(2,3)]=c("CB","exp")

#數(shù)據(jù)格式如下
# > head(vln.df)
# gene                     CB   exp
# 1 CLEC9A N01_AAACGGGCATTTCAGG_1 0.000
# 2   RGCC N01_AAACGGGCATTTCAGG_1 0.000
# 3 FCER1A N01_AAACGGGCATTTCAGG_1 0.000
# 4   CD1A N01_AAACGGGCATTTCAGG_1 0.000
# 5  FSCN1 N01_AAACGGGCATTTCAGG_1 1.104
# 6   CCR7 N01_AAACGGGCATTTCAGG_1 0.000

anno=mye.seu@meta.data[,c("CB","celltype")]
vln.df=inner_join(vln.df,anno,by="CB")
vln.df$gene=factor(vln.df$gene,levels = markerdf2$gene) #為了控制畫圖的基因順序

vln.df%>%ggplot(aes(celltype,exp))+geom_violin(aes(fill=gene),scale = "width")+
  facet_grid(vln.df$gene~.,scales = "free_y")+
  scale_fill_brewer(palette = "Set3",direction = 1)+
  scale_x_discrete("")+scale_y_continuous("")+
  theme_bw()+
  theme(
    axis.text.x.bottom = element_text(angle = 45,hjust = 1,vjust = 1),
    panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
    legend.position = "none"
  )
ggsave("vln2.pdf",width = 11,height = 22,units = "cm")

geom_violin()函數(shù)的scale參數(shù)為"width"時(shí)爆雹,所有小提琴有相同的寬度,默認(rèn)是"area"媒至,有相同的面積顶别;facet_grid()用來分面谷徙,文中用的是多行一列拒啰,scales = "free_y"表示不同行之間可以有不同范圍的y值;scale_fill_brewer()使用ColorBrewer調(diào)色板完慧。

file

這個(gè)圖的顏色根據(jù)基因來區(qū)分谋旦,有時(shí)可能還會(huì)看到小提琴圖的顏色是用亞群某個(gè)基因的表達(dá)均值來映射的,比如

vln.df$celltype_gene=paste(vln.df$celltype,vln.df$gene,sep = "_")
stat.df=as.data.frame(vln.df%>%group_by(celltype,gene)%>%summarize(mean=mean(exp)))
stat.df$celltype_gene=paste(stat.df$celltype,stat.df$gene,sep = "_")
stat.df=stat.df[,c("mean","celltype_gene")]
vln.df=inner_join(vln.df,stat.df,by="celltype_gene")
vln.df$mean=ifelse(vln.df$mean > 3, 3, vln.df$mean)
#這里的閾值3要提前綜合所有基因看一下
vln.df%>%ggplot(aes(celltype,exp))+geom_violin(aes(fill=mean),scale = "width")+
  facet_grid(vln.df$gene~.,scales = "free_y")+
  scale_fill_gradient(limits=c(0,3),low = "lightgrey",high = "yellow")+
  scale_x_discrete("")+scale_y_continuous("",expand = c(0.02,0))+
  theme_bw()+
  theme(
    panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
    axis.text.x.bottom = element_text(angle = 45,hjust = 1,vjust = 1)
  )
ggsave("vln3.pdf",width = 11,height = 22,units = "cm")
file

4. 氣泡圖展示marker基因

Seurat的畫法是這樣的屈尼,

DotPlot(mye.seu, features = markerdf2$gene)+RotatedAxis()+
  scale_x_discrete("")+scale_y_discrete("")
#其余的微調(diào)同ggplot2
file

第二種方法册着,ggplot2代碼如下

bubble.df=as.matrix(mye.seu[["RNA"]]@data[markerdf2$gene,])
bubble.df=t(bubble.df)
bubble.df=as.data.frame(scale(bubble.df))
bubble.df$CB=rownames(bubble.df)
bubble.df=merge(bubble.df,mye.seu@meta.data[,c("CB","celltype")],by = "CB")
bubble.df$CB=NULL

celltype_v=c()
gene_v=c()
mean_v=c()
ratio_v=c()
for (i in unique(bubble.df$celltype)) {
  bubble.df_small=bubble.df%>%filter(celltype==i)
  for (j in markerdf2$gene) {
    exp_mean=mean(bubble.df_small[,j])
    exp_ratio=sum(bubble.df_small[,j] > min(bubble.df_small[,j])) / length(bubble.df_small[,j])
    celltype_v=append(celltype_v,i)
    gene_v=append(gene_v,j)
    mean_v=append(mean_v,exp_mean)
    ratio_v=append(ratio_v,exp_ratio)
  }
}

plotdf=data.frame(
  celltype=celltype_v,
  gene=gene_v,
  exp=mean_v,
  ratio=ratio_v
)
plotdf$celltype=factor(plotdf$celltype,levels = sort(unique(plotdf$celltype)))
plotdf$gene=factor(plotdf$gene,levels = rev(as.character(markerdf2$gene)))
plotdf$exp=ifelse(plotdf$exp>3,3,plotdf$exp)
plotdf%>%ggplot(aes(x=celltype,y=gene,size=ratio,color=exp))+geom_point()+
  scale_x_discrete("")+scale_y_discrete("")+
  scale_color_gradientn(colours = rev(c("#FFD92F","#FEE391",brewer.pal(11, "Spectral")[7:11])))+
  scale_size_continuous(limits = c(0,1))+theme_bw()+
  theme(
    axis.text.x.bottom = element_text(hjust = 1, vjust = 1, angle = 45)
  )
ggsave(filename = "bubble2.pdf",width = 9,height = 12,units = c("cm"))
file

這兩種方法具體函數(shù)定義略有差異,所以氣泡圖看上去不太一樣


到這里脾歧,marker基因的可視化就結(jié)束了甲捏,基本就是這些。如果你覺得上述內(nèi)容對(duì)你有用鞭执,歡迎轉(zhuǎn)發(fā)司顿,點(diǎn)贊!有任何疑問可以在公眾號(hào)后臺(tái)提出兄纺,我都會(huì)回復(fù)的大溜。

因水平有限,有錯(cuò)誤的地方估脆,歡迎批評(píng)指正钦奋!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疙赠,隨后出現(xiàn)的幾起案子付材,更是在濱河造成了極大的恐慌,老刑警劉巖圃阳,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厌衔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡限佩,警方通過查閱死者的電腦和手機(jī)葵诈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門裸弦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人作喘,你說我怎么就攤上這事理疙。” “怎么了泞坦?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵窖贤,是天一觀的道長。 經(jīng)常有香客問我贰锁,道長赃梧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任豌熄,我火速辦了婚禮授嘀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锣险。我一直安慰自己蹄皱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布芯肤。 她就那樣靜靜地躺著巷折,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崖咨。 梳的紋絲不亂的頭發(fā)上锻拘,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音击蹲,去河邊找鬼署拟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛际邻,可吹牛的內(nèi)容都是我干的芯丧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼世曾,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缨恒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轮听,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤骗露,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后血巍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萧锉,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年述寡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柿隙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叶洞。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖禀崖,靈堂內(nèi)的尸體忽然破棺而出衩辟,到底是詐尸還是另有隱情,我是刑警寧澤波附,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布艺晴,位于F島的核電站,受9級(jí)特大地震影響掸屡,放射性物質(zhì)發(fā)生泄漏封寞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一仅财、第九天 我趴在偏房一處隱蔽的房頂上張望狈究。 院中可真熱鬧,春花似錦满着、人聲如沸谦炒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缕探,卻和暖如春魂莫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爹耗。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工耙考, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人潭兽。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓倦始,卻偏偏與公主長得像,于是被迫代替她去往敵國和親山卦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鞋邑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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