從空間聚類(lèi)的角度看結(jié)直腸癌肝轉(zhuǎn)移的細(xì)胞異質(zhì)性

作者易核,Evil Genius

今天分享的內(nèi)容來(lái)自于文獻(xiàn)Single-cell and spatial transcriptome analysis reveals the cellular heterogeneity of liver metastatic colorectal cancer, 2023年6月發(fā)表于SCIENCE ADVANCES虏肾,IF 9.79分哨颂,可見(jiàn)隨著單細(xì)胞空間聯(lián)合分析的越來(lái)越深入,發(fā)文的難度也在提升主卫。

首先我們需要確立一個(gè)觀(guān)點(diǎn),那就是之前我們都在強(qiáng)調(diào)單細(xì)胞空間的聯(lián)合分析注釋空間轉(zhuǎn)錄組,但很多時(shí)候過(guò)于精細(xì)往往會(huì)忽略結(jié)構(gòu)的整體作用旨剥,所以空間聚類(lèi)的作用凸顯了出來(lái),尤其在組織形態(tài)的加持下浅缸,當(dāng)然了轨帜,細(xì)胞類(lèi)型的精確匹配也是非常重要,這也是為什么都在提時(shí)空組學(xué)的原因衩椒。

華大的時(shí)空組學(xué)是目前國(guó)內(nèi)最好的平臺(tái)蚌父,而且匹配了華大研究院專(zhuān)門(mén)分析研究時(shí)空組學(xué)數(shù)據(jù),在這里雖然我不是華大的人毛萌,但還是很希望有朝一日投入到國(guó)產(chǎn)的時(shí)空組學(xué)研究中去苟弛,同時(shí)也能離家近一點(diǎn),希望有機(jī)會(huì)吧阁将,天津華大研究院膏秫,不過(guò)目前還是主要10X時(shí)空組項(xiàng)目居多。

好了做盅,開(kāi)始我們今天的結(jié)直腸癌的時(shí)空研究荔睹,其中文獻(xiàn)的思路是最主要的狸演。

結(jié)直腸癌(CRC)是一種惡性腫瘤,其中部分CRC存在轉(zhuǎn)移性僻他,尤其是肝轉(zhuǎn)移宵距,這也是預(yù)后較差的一個(gè)指標(biāo)。轉(zhuǎn)移過(guò)程涉及多個(gè)步驟吨拗,包括癌細(xì)胞從原發(fā)腫瘤部位逃逸满哪、在血流中存活、在遠(yuǎn)處部位播散劝篷,最終生長(zhǎng)為轉(zhuǎn)移性腫瘤哨鸭。癌細(xì)胞和基質(zhì)細(xì)胞之間的交流在促進(jìn)轉(zhuǎn)移擴(kuò)散中起著至關(guān)重要的作用。這種交流通過(guò)分泌細(xì)胞因子娇妓、生長(zhǎng)因子和蛋白酶來(lái)重塑腫瘤微環(huán)境(TME)像鸡。TME是一種復(fù)雜的細(xì)胞組成,包括不同群體的成纖維細(xì)胞和免疫細(xì)胞哈恰,所有這些細(xì)胞在癌癥逃避只估、轉(zhuǎn)移和對(duì)治療的反應(yīng)中發(fā)揮重要作用。所以時(shí)空組學(xué)的研究就在于發(fā)現(xiàn)兩種腫瘤之間的區(qū)別着绷。

首先第一步蛔钙,仍然是CRC單細(xì)胞全圖譜(BD平臺(tái)),包括原發(fā)性CRC和肝轉(zhuǎn)移瘤荠医。包括原發(fā)性CC吁脱、鄰近正常結(jié)直腸黏膜(CN)、肝轉(zhuǎn)移(LM)彬向、鄰近正常肝組織(LN)和外周血(PB)兼贡。

我們這里注意下細(xì)胞注釋的細(xì)節(jié),根據(jù)EPCAM和SOX9的表達(dá)鑒定腫瘤細(xì)胞娃胆,根據(jù)COL1A1和COL1A2的表達(dá)鑒定成纖維細(xì)胞遍希,根據(jù)PECAM1和CD34的表達(dá)鑒定內(nèi)皮細(xì)胞。免疫細(xì)胞鑒定為T(mén)細(xì)胞(CD3)缕棵、自然殺傷(NK)細(xì)胞(CD56)孵班、B細(xì)胞/漿細(xì)胞(CD19)、單核細(xì)胞/巨噬細(xì)胞(CD14)招驴、樹(shù)突狀細(xì)胞(dc) (HLA.DRA)和肥大細(xì)胞(TPSAB1)篙程。當(dāng)然這里也要注意細(xì)胞分布的樣本特異性

第二步就是CRC和肝轉(zhuǎn)移瘤的空間圖譜

1别厘、通過(guò)蘇木素-伊紅(he)染色和基因表達(dá)特征鑒定每個(gè)樣本的腫瘤區(qū)域(T)和癌旁區(qū)域(PT)虱饿。
2、癌旁組織和腫瘤組織的差異分析,并對(duì)空間數(shù)據(jù)聚類(lèi)識(shí)別腫瘤的空間異質(zhì)性氮发。
3渴肉、整合單細(xì)胞空間的數(shù)據(jù),識(shí)別空間每個(gè)區(qū)域的細(xì)胞類(lèi)型組成(這個(gè)單細(xì)胞空間聯(lián)合的方法是SPOTlight)爽冕,ST組織中鑒定出B細(xì)胞仇祭、T細(xì)胞、NK細(xì)胞颈畸、漿細(xì)胞乌奇、髓樣細(xì)胞、腫瘤細(xì)胞眯娱、成纖維細(xì)胞和內(nèi)皮細(xì)胞礁苗。這些細(xì)胞簇的比例和分?jǐn)?shù)在每個(gè)區(qū)域都不同。細(xì)胞類(lèi)型在癌區(qū)和癌旁有不同的分布模式徙缴。

第三步试伙,研究原發(fā)性和肝轉(zhuǎn)移腫瘤細(xì)胞的異質(zhì)性

注意這里是研究同一種細(xì)胞類(lèi)型---腫瘤細(xì)胞,不同條件下的異質(zhì)性于样,之前的內(nèi)容講到過(guò)疏叨,轉(zhuǎn)錄因子(TF)分析和GSVA分析主要針對(duì)這種情況,以此來(lái)鑒別腫瘤細(xì)胞前后發(fā)生的調(diào)控變化百宇。


微環(huán)境重塑髓系細(xì)胞組成

在腫瘤微環(huán)境(TME)中考廉,髓系細(xì)胞是由單核/巨噬細(xì)胞秘豹、傳統(tǒng)樹(shù)突狀細(xì)胞(cdc)和肥大細(xì)胞組成的異質(zhì)性亞群携御。髓系細(xì)胞在不同部位的分布模式不同,具有器官特異性既绕。


髓系細(xì)胞免疫圖譜
CXCL13+ T cells are enriched in liver metastatic tumors

在適應(yīng)性免疫應(yīng)答中啄刹,T細(xì)胞尤其是CD8+ T細(xì)胞和CD4+ T細(xì)胞發(fā)揮主導(dǎo)作用。分析中發(fā)現(xiàn)CD8+ T細(xì)胞和CD4+ T細(xì)胞都包含一個(gè)表達(dá)CXCL13的cluster凄贩,CXCL13是已知與CXCR5相互作用的趨化因子誓军。與正常肝組織(LN)相比,CD8_CXCL13細(xì)胞在肝轉(zhuǎn)移(LM)中顯著升高疲扎,而在正常結(jié)直腸黏膜(CN)昵时、LN和外周血(PB)中很少檢測(cè)到。進(jìn)一步分析CXCL13+ T細(xì)胞亞群的特征椒丧。基因集變異分析(Gene set variation analysis, GSVA)顯示CD8_CXCL13亞群富集T細(xì)胞增殖通路壹甥,而CD4_CXCL13亞群富集G2-M檢查點(diǎn)通路,表明這兩個(gè)亞群的增殖特性壶熏。對(duì)每個(gè)cluster內(nèi)的基因表達(dá)進(jìn)行的分析表明句柠,CD8_CXCL13細(xì)胞高水平表達(dá)ITGAE,這是組織駐留記憶T (TRM)細(xì)胞的標(biāo)志物。

CD8_CXCL13和CD4_CXCL13細(xì)胞在結(jié)直腸癌LM中表達(dá)上調(diào)溯职,其機(jī)制可能與高增殖能力有關(guān)精盅。

CXCL13+ T細(xì)胞與結(jié)直腸癌患者的良好預(yù)后相關(guān)

在TME中富集的CXCL13+ T細(xì)胞是一個(gè)腫瘤反應(yīng)性的亞群,有助于改善CRC患者的預(yù)后谜酒。


Distinct subsets of fibroblasts exist in the primary and liver metastatic tumors of CRC

成纖維細(xì)胞是腫瘤微環(huán)境(TME)中基質(zhì)非免疫細(xì)胞的主要類(lèi)型叹俏,在多種腫瘤中表現(xiàn)出顯著的異質(zhì)性。在這項(xiàng)研究中僻族,研究人員旨在表征原發(fā)性結(jié)直腸癌(CC)和肝轉(zhuǎn)移(LM)腫瘤中的成纖維細(xì)胞亞群她肯。觀(guān)察到所有的成纖維細(xì)胞都高表達(dá)ACTA2,這是一種廣泛認(rèn)可的癌癥相關(guān)成纖維細(xì)胞(CAFs)的標(biāo)志物鹰贵。

分析揭示了結(jié)直腸癌原發(fā)腫瘤和肝轉(zhuǎn)移腫瘤之間不同的表型特征和不同比例的成纖維細(xì)胞亞群晴氨。這些發(fā)現(xiàn)強(qiáng)調(diào)了TME在不同癌癥環(huán)境中的細(xì)胞異質(zhì)性

The F3-expressing fibroblast subset enriched in the primary tumors secretes protumor factors and is associated with poor prognosis of CRC patients


為了了解在CC和LM中富集的不同成纖維細(xì)胞如何促進(jìn)腫瘤微環(huán)境(TME)的重塑碉输,研究者進(jìn)一步分析了F2_MCAM和F4_F3亞群的特征籽前。F2_MCAM亞群富集了參與NOTCH信號(hào)通路的JAG1和NOTCH3。另一方面敷钾,F(xiàn)4_F3亞群表現(xiàn)出C3和CXCL1的富集枝哄,表明其參與補(bǔ)體和炎癥反應(yīng)通路。此外阻荒,F(xiàn)4_F3高表達(dá)MMP2和MMP3挠锥,這可能有助于細(xì)胞外基質(zhì)的組織。此外侨赡,F(xiàn)4_F3亞群富集了與血管生成和腫瘤侵襲相關(guān)的腫瘤因子蓖租,包括VEGFA, NRG1, HGF, GDF15, AREG和BMP2。
進(jìn)一步分析發(fā)現(xiàn)F4_F3成纖維細(xì)胞和腫瘤細(xì)胞之間存在相互作用羊壹,特別是通過(guò)NRG1和ERBB3通路蓖宦。ERBB3主要表達(dá)于腫瘤細(xì)胞,可與ERBB2形成異源二聚體油猫,促進(jìn)腫瘤細(xì)胞增殖和對(duì)結(jié)直腸癌靶向治療西妥昔單抗的耐藥稠茂。空間轉(zhuǎn)錄組學(xué)(ST)分析顯示F4_F3成纖維細(xì)胞與周?chē)鷈rbb3陽(yáng)性的腫瘤細(xì)胞NRG1共定位

在CC中富集的F4_F3成纖維細(xì)胞亞群與腫瘤因子的分泌情妖、參與NRG1-ERBB3通路以及CRC患者較差的預(yù)后相關(guān)睬关。這些發(fā)現(xiàn)闡明了成纖維細(xì)胞在TME形成中的作用及其對(duì)腫瘤進(jìn)展和患者結(jié)局的影響

The MCAM-expressing fibroblast in TME of LM modulates the generation of CD8_CXCL13 cells through the Notch signaling pathway

研究探討了Notch信號(hào)通路在CD8_CXCL13和CD4_CXCL13亞群中對(duì)CXCL13表達(dá)的調(diào)節(jié)作用毡证。我們發(fā)現(xiàn)Notch信號(hào)轉(zhuǎn)錄因子RBPJ在兩個(gè)亞群中均優(yōu)先表達(dá)电爹。RBPJ在LM中的表達(dá)與CXCL13、ITGAE呈正相關(guān)情竹,而在CC中未觀(guān)察到藐不。CD8_CXCL13和CD4_CXCL13亞群主要表達(dá)NOTCH1受體匀哄。對(duì)Notch配體的分析表明,它們主要表達(dá)于成纖維細(xì)胞和內(nèi)皮細(xì)胞雏蛮。具體而言涎嚼,F(xiàn)2_MCAM子集富集了JAG1, F5_COCH子集富集了DLL1, E2_DLL4子集富集了DLL4、JAG1和JAG2挑秉。

交互作用分析顯示法梯,E2_DLL4內(nèi)皮細(xì)胞亞群與CXCL13+ T細(xì)胞的交互作用最強(qiáng),而F2_MCAM成纖維細(xì)胞亞群與CD8_CXCL13和CD4_CXCL13通過(guò)JAG1-NOTCH1相互作用犀概。研究人員推測(cè)立哑,F(xiàn)2_MCAM亞群由于其在TME中的分布模式,參與了CXCL13+ T細(xì)胞中Notch信號(hào)的激活姻灶☆醮拢患者分析顯示,F(xiàn)2_MCAM-high組在LM中CD8_CXCL13亞群比例更高产喉。同樣捂掰,F(xiàn)2_MCAM在LM中的浸潤(rùn)評(píng)分與CD8_CXCL13亞群的浸潤(rùn)評(píng)分相關(guān),而在CC中則不相關(guān)曾沈。

空間轉(zhuǎn)錄組學(xué)(ST)分析證實(shí)了F2_MCAM和CD8_CXCL13在LM中的浸潤(rùn)相關(guān)这嚣。此外,與CC相比塞俱,Notch信號(hào)通路在LM中的相互作用強(qiáng)度更高姐帚,可能是由于在LM中F2_MCAM亞群的比例更高。此外障涯,本研究還通過(guò)預(yù)測(cè)RBPJ在CXCL13啟動(dòng)子上的結(jié)合位點(diǎn)罐旗,探討了Notch信號(hào)通路對(duì)CXCL13表達(dá)的潛在調(diào)節(jié)作用,提示RBPJ可能是一個(gè)影響CXCL13表達(dá)的轉(zhuǎn)錄因子像樊。

研究結(jié)果表明Notch信號(hào)通路在CD8_CXCL13和CD4_CXCL13亞群中調(diào)節(jié)CXCL13的表達(dá)尤莺,其中F2_MCAM成纖維細(xì)胞亞群在CXCL13+ T細(xì)胞中激活Notch信號(hào)通路中起關(guān)鍵作用旅敷。成纖維細(xì)胞生棍、Notch信號(hào)和CXCL13表達(dá)之間的相互作用為T(mén)ME的復(fù)雜性及其對(duì)抗腫瘤免疫的影響提供了見(jiàn)解。

Intercellular interaction network in ST tissues(通訊分析居然放在了最后媳谁,分析方法采用了cellphoneDB)

原發(fā)腫瘤和肝轉(zhuǎn)移腫瘤間質(zhì)室內(nèi)的細(xì)胞相互作用涂滴。VEGFA-NRP1和VEGFA-NRP2配體-受體對(duì)在原發(fā)性和肝轉(zhuǎn)移性腫瘤中均有富集,表明它們參與了腫瘤的發(fā)生和進(jìn)展晴音。此外柔纵,分析發(fā)現(xiàn)原發(fā)腫瘤(CC)和肝轉(zhuǎn)移腫瘤(LM)之間富集的配體-受體對(duì)不同。具體而言锤躁,ERBB3-NRG1對(duì)在原發(fā)腫瘤亞群C1和C3中富集搁料,而在肝轉(zhuǎn)移腫瘤亞群L1和L2中缺失,表明其在原發(fā)腫瘤的發(fā)展和轉(zhuǎn)移中具有潛在作用。

方法需要注意的地方

SCENIC分析

最后郭计,附上圖中繪制堆疊小提琴圖的代碼

source 腳本

library(Seurat)
library(Rmisc)
library(ggplot2)

####**** function part ****####
stacked_violin_plot=function(gene,seurat_object,cluster=NULL,limits.max=7,
         width=13,height=10.3,flip=T,filename="",text.size=10,Mean=T,
         col=colors){
  if(length(cluster)>0){
    seurat_object=subset(seurat_object,idents = cluster)
  }
  ave_expression=AverageExpression(seurat_object,assays = "RNA")$RNA
  ave_expression=log2(ave_expression+1)
  data_matrix=seurat_object@assays$RNA@data
  plot.list=list()
  #g=gene[5]
  no=1
  gene=c(gene[1],gene,gene[length(gene)])
  for (g in gene) {
      ave_gene_choose=ave_expression[which(rownames(ave_expression)==g),]
      data_matrix_choose=data_matrix[which(rownames(data_matrix)==g),]
      #data_matrix_choose=as.data.frame(data_matrix_choose)
      df=data.frame(expression=as.numeric(data_matrix_choose),cluster=as.character(seurat_object@active.ident))
      mean=vector()
      ave_gene_choose=as.data.frame(ave_gene_choose)
      if(Mean==T){
        for (i in df$cluster) {
          mean=c(mean,ave_gene_choose[i,])
        }
        df[,"mean"]=as.data.frame(mean)
        df=as.data.frame(df)
      }
    
  if(!flip){
    df[,"cluster"]=factor(df$cluster,levels=levels(seurat_object))
    if(Mean==F){
      p <- ggplot(df, aes(x=cluster, y=expression, fill= cluster, color=cluster))+
        geom_violin(scale="width") +
        labs(title=paste(g), y ="Expression", x="Cluster")+
        #theme_classic() +
        scale_fill_manual(values = col)+
        scale_color_manual(values = col)+
        theme(axis.title.y =  element_blank())+
        #theme(axis.ticks.y =  element_blank())+
        #theme(axis.line.y =   element_blank())+
        #theme(axis.text.y =   element_blank())+
        theme(axis.title.x = element_blank())+
        theme(legend.position="none" )
    }else{
      p <- ggplot(df, aes(x=cluster, y=expression, fill= mean, color=mean))+
        geom_violin(scale="width") +
        labs(title=paste(g), y ="Expression", x="Cluster")+
        #theme_classic() +
        scale_color_gradientn(colors = c("#FFFF00", "#FFD000","#FF0000","#360101"),
                              limits=c(0,limits.max))+
        scale_fill_gradientn(colors = c("#FFFF00", "#FFD000","#FF0000","#360101"),
                             limits=c(0,limits.max))+
        theme(axis.title.y =  element_blank())+
        #theme(axis.ticks.y =  element_blank())+
        #theme(axis.line.y =   element_blank())+
        #theme(axis.text.y =   element_blank())+
        theme(axis.title.x = element_blank())+
        theme(legend.position="none" )
    }
    
    if(no!=length(gene)){
      p<-p+
        theme( axis.line.x=element_blank(),
               axis.text.x = element_blank(),
               axis.ticks.x = element_blank())
    }else{
      p<-p+
        theme(axis.text.x = element_text(size = 10,vjust = 0.5,face = "bold",color = "black"))
    }
    #p<-p+theme(plot.title = element_text(size=text.size,face="bold",hjust = 0.5))
    p=p+theme(panel.border = element_rect(fill = "NA",size = 0.5,color = "black"),
              panel.background = element_blank(),
              panel.grid = element_blank())
    if(no==1){
      plot.margin=unit(c(0.2, 0.5, 0.2, 0.5), "cm")
      p=p+theme(legend.title = element_text(size = 9,face = "bold"), 
            legend.text  = element_text(size = 9,face = "bold"),
            legend.key.size = unit(1, "lines"))
      legend.position="none"
    }else if(no==length(gene)){
      plot.margin=unit(c(-0.3, 0.5, 0.2, 0.5), "cm")
      legend.position="none"
    }else{
      plot.margin=unit(c(-0.74, 0.5, 0, 0.5), "cm")
      legend.position="none"
    }
    p=p+xlab("") + ylab(g) + ggtitle("") +
      theme(legend.position = legend.position,
            #axis.text.x = element_blank(),
            axis.text.y = element_blank(),
            #axis.ticks.x = element_blank(),
            axis.ticks.y = element_blank(),
            axis.title.y = element_text(size=text.size,face="bold",hjust = 0.5),
            plot.margin = plot.margin )
    
    if(length(plot.list)==0){
      plot.list=list(p)
    }else{
      plot.list=c(plot.list,list(p))
    }
    no=no+1
  }else{
    ####******########
    df$cluster=factor(df$cluster,levels=rev(levels(seurat_object)))
    if(Mean==F){
      p <- ggplot(df, aes(x=cluster, y=expression, fill= cluster, color=cluster))+
        geom_violin(scale="width") +
        labs(title=paste(g), y ="Expression", x="Cluster")+
        #theme_classic() +
        scale_fill_manual(values = col)+
        scale_color_manual(values = col)+
        theme(axis.title.y =  element_blank())+
        #theme(axis.ticks.y =  element_blank())+
        #theme(axis.line.y =   element_blank())+
        #theme(axis.text.y =   element_blank())+
        theme(axis.title.x = element_blank())+
        theme(legend.position="right")
    }else{
      p <- ggplot(df, aes(x=cluster, y=expression, fill= mean, color=mean))+
        geom_violin(scale="width") +
        labs(title=paste(g), y ="Expression", x="Cluster")+
        #theme_classic() +
        scale_color_gradientn(colors = c("#FFFF00", "#FFD000","#FF0000","#360101"),
                              limits=c(0,limits.max))+
        scale_fill_gradientn(colors = c("#FFFF00", "#FFD000","#FF0000","#360101"),
                             limits=c(0,limits.max))+
        theme(axis.title.y =  element_blank())+
        #theme(axis.ticks.y =  element_blank())+
        #theme(axis.line.y =   element_blank())+
        #theme(axis.text.y =   element_blank())+
        theme(axis.title.x = element_blank())+
        theme(legend.position="right")
    }

    
    if(no!=length(gene)){
      p<-p+
        theme( axis.line.x=element_blank(),
               axis.text.x = element_blank(),
               axis.ticks.x = element_blank())
    }else{
      p<-p+
        theme(axis.text.x = element_text(size = 10,vjust = 0.2,face = "bold",color = "black"))
    }
    p<-p+theme(plot.title = element_text(size=4,face="bold",hjust = 0.5,color = "black"))
    p=p+theme(panel.border = element_rect(fill = "NA",size = 0.5,color = "black"),
              panel.background = element_blank(),
              panel.grid = element_blank())
    if(no==1){
      plot.margin=unit(c(0.5, 0.5, 0.5, 0.2), "cm")
      p=p+theme(legend.title = element_text(size = 9,face = "bold"), 
                legend.text  = element_text(size = 9,face = "bold"),
                legend.key.size = unit(0.5, "lines"))
      #legend.position="left"
    }else if(no==length(gene)){
      plot.margin=unit(c(0.5, 0.2, 0.5, 0.3), "cm")
      #legend.position="none"
    }else{
      plot.margin=unit(c(0.5, 0, 0.5, -0.11), "cm")
      #legend.position="none"
    }
    if(no==1){
      p=p+xlab("") + ylab("") +
        theme(legend.position = "none",
              axis.text.x = element_blank(),
              #axis.text.y = element_blank(),
              axis.ticks.x = element_blank(),
              #axis.ticks.y = element_blank(),
              #axis.title.x = element_text(size=10,face="bold",hjust = 0.5),
              plot.title = element_text(colour = "black", face = "bold", 
                                        size = text.size, vjust = 0.2),
              axis.text.y = element_text(size=10,face="bold",hjust = 1,color = "black"),
              plot.margin = plot.margin )+coord_flip()
    }else if(no==length(gene)){
      p=p+xlab("") + ylab("") +
        theme(legend.position = "right",
              axis.text.x = element_blank(),
              axis.text.y = element_blank(),
              axis.ticks.x = element_blank(),
              axis.ticks.y = element_blank(),
              #axis.title.x = element_text(size=10,face="bold",hjust = 0.5),
              plot.title = element_text(colour = "black", face = "bold", 
                                        size = text.size, vjust = 0.2),
              #axis.text.y = element_text(size=10,face="bold",hjust = 1,color = "black"),
              plot.margin = plot.margin )+coord_flip()
    }else{
      p=p+xlab("") + ylab("") +
        theme(legend.position = "none",
              axis.text.x = element_blank(),
              axis.text.y = element_blank(),
              axis.ticks.x = element_blank(),
              axis.ticks.y = element_blank(),
              #axis.title.x = element_text(size=10,face="bold",hjust = 0.5),
              plot.title = element_text(colour = "black", face = "bold", 
                                        size = text.size, vjust = 0.2),
              #axis.text.y = element_text(size=10,face="bold",hjust = 1,color = "black"),
              plot.margin = plot.margin )+coord_flip()
    }
    
    
    if(length(plot.list)==0){
      plot.list=list(p)
    }else{
      plot.list=c(plot.list,list(p))
    }
    no=no+1
  }
  }
  pdf(paste0(filename,"_vln_manual",".pdf"),width = width,height = height)
  if(flip){
    m=multiplot(plotlist = plot.list,cols = length(gene))
  }else{
    m=multiplot(plotlist = plot.list,cols=1)
  }
  dev.off()
}
用法
stacked_violin_plot(gene = c("CD40","CD80","CD86"),col = colors_myeloid,
                    filename = "Figure 3H.CD40",seurat_object = myeloid.combined,
                    Mean = T,flip = F,width = 10,height = 4,legend.position = "right",
                    limits.max = 3)
文章所有的代碼放在了這里霸琴,大家隨意查看下載

鏈接:https://pan.baidu.com/s/1jlVm6Ojx9Tx-Sh7Zyrv31g?pwd=ZyfO
提取碼:ZyfO

生活很好,有你更好

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載昭伸,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者梧乘。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市庐杨,隨后出現(xiàn)的幾起案子选调,更是在濱河造成了極大的恐慌,老刑警劉巖灵份,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仁堪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡填渠,警方通過(guò)查閱死者的電腦和手機(jī)枝笨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)揭蜒,“玉大人横浑,你說(shuō)我怎么就攤上這事√敫” “怎么了徙融?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)瑰谜。 經(jīng)常有香客問(wèn)我欺冀,道長(zhǎng),這世上最難降的妖魔是什么萨脑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任隐轩,我火速辦了婚禮,結(jié)果婚禮上渤早,老公的妹妹穿的比我還像新娘职车。我一直安慰自己,他們只是感情好鹊杖,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布悴灵。 她就那樣靜靜地躺著,像睡著了一般骂蓖。 火紅的嫁衣襯著肌膚如雪积瞒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,954評(píng)論 1 283
  • 那天登下,我揣著相機(jī)與錄音茫孔,去河邊找鬼叮喳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缰贝,可吹牛的內(nèi)容都是我干的嘲更。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼揩瞪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赋朦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起李破,我...
    開(kāi)封第一講書(shū)人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宠哄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嗤攻,有當(dāng)?shù)厝嗽跇?shù)林里發(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
  • 文/蒙蒙 一尚胞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帜慢,春花似錦笼裳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至密幔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撩轰,已是汗流浹背胯甩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工昧廷, 沒(méi)想到剛下飛機(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)容