使用ggplot2优化Seurat绘图

作者: Hayley笔记 | 来源:发表于2021-06-29 20:21 被阅读0次

    单细胞绘图系列:


    Seurat是分析单细胞数据一个非常好用的包,自带非常优秀的绘图函数,见Seurat绘图函数总结。但是图片有些地方需要改善的地方,默认的调整参数没有提供。Seurat的画图底层是用ggplot架构的,所以可以用ggplot的参数进行调整。

    1. UMAP/TSNE聚类图的修饰

    1.1 使用ggplot2绘制UMAP/TSNE图

    可以更灵活的更改颜色等参数

    library(tidyverse)
    #提取UMAP坐标信息方法1:
    mydata = pbmc@reductions$umap@cell.embeddings %>%
      as.data.frame() %>% cbind(cell_type = pbmc@meta.data$cell_type)
    #提取UMAP坐标信息方法2:
    mydata<- FetchData(pbmc,vars = c("UMAP_1","UMAP_2","cell_type"))
    ## 使用 ggplot 绘图
    jpeg(file = "UMAP_by_cluster.jpg", width = 7, height = 7, units = "in", res = 600)
    ggplot(mydata, aes(x = UMAP_1, y = UMAP_2, color = cell_type)) + 
      geom_point(size = 0.5, alpha = 1) + 
      scale_color_manual(values=c("brown3", "chartreuse3", "khaki1", "plum1", "lightskyblue", "darkorange", "hotpink",  "seashell3", "lightblue2"))+
      guides(colour=guide_legend(override.aes=list(size=10)))+ #改标签大小
      theme(axis.text.y = element_blank(),   #去掉y轴刻度注释
            axis.ticks.y = element_blank(),    #去掉y轴刻度
            axis.text.x = element_blank(),   #去掉x轴刻度注释
            axis.ticks.x = element_blank())+  #去掉x轴刻度
      theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid"))+  #加边框
      theme(panel.background = element_rect(fill = "white")
      )
    dev.off()
    

    ggplot2颜色参考:http://sape.inf.usi.ch/quick-reference/ggplot2/colour
    图形颜色选取
    在线颜色值转换(颜色英文名称/R.G.B/十六进制颜色编号)

    1.2 直接使用DimPlot()函数通过参数调整来优化

    Seurat的画图底层是用ggplot架构的,可以直接对接ggplot2的theme函数

    DimPlot(pbmc, label = T)+  
        NoLegend()+labs(x = "UMAP1", y = "UMAP2") +   #更改横纵坐标名称
        theme(axis.text.y = element_blank(),   #去掉y轴刻度注释
              axis.ticks.y = element_blank(),    #去掉y轴刻度
              axis.text.x = element_blank(),   #去掉x轴刻度注释
              axis.ticks.x = element_blank())+  #去掉x轴刻度
        theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid"))  #加边框
    

    更改配色

    1. 直接对接paletteer或RColorBrewer的颜色,通过DimPlot()中的cols参数传入。(这里用了ggsci的颜色)
    library(paletteer)
    col <- paletteer_d("ggsci::nrc_npg")[c(1,3,4,9,5,2,6,8,10)] #有几群细胞需要标记就选几种颜色  
    p1=DimPlot(pbmc, label = T,   
               cols= col, #设置颜色  
               pt.size = 1.5,#设置点的大小  
               repel = T)+ 
        NoLegend() 
    library(RColorBrewer)
    col <- c(brewer.pal(9, "Set1"))
    p2=DimPlot(pbmc, label = T,   
            cols= col, #设置颜色  
            pt.size = 1.5,#设置点的大小  
            repel = T)+
        NoLegend()
    p1|p2
    

    当然也可以直接设置颜色

    col <- c("darkolivegreen2","lightpink","lightblue2","#00F5FF","#FFA500","plum2","#FF6A6A","#7FFFD4", "#AB82FF")
    DimPlot(pbmc, label = T,   
            cols= col, #设置颜色  
            pt.size = 1.5,#设置点的大小  
            repel = T)+
            theme(axis.text.y = element_blank(),   #去掉y轴刻度注释
              axis.ticks.y = element_blank(),    #去掉y轴刻度
              axis.text.x = element_blank(),   #去掉x轴刻度注释
              axis.ticks.x = element_blank())+  #去掉x轴刻度
        theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid")) +
      NoLegend()
    

    2. 更改小提琴图横坐标顺序

    如果不加设定,小提琴图横坐标默认是以字母顺序排序(下面这个已经定义好level)。

    VlnPlot(pbmc, features = c("CD3D"))
    

    如果相对小提琴图横坐标顺序进行调整,需要重新定义level。

    My_levels <- c( "DC", "Memory CD4 T", "CD8 T","CD14+ Mono", "B","FCGR3A+ Mono", "NK","Naive CD4 T", "Platelet")
    Idents(pbmc) <- factor(Idents(pbmc), levels= My_levels)
    

    3. ggplot2画tSNE的聚类点图(带圈带阴影)

    https://mp.weixin.qq.com/s/itt_LvNWH7iHbjdaqY7JOw

    4. FeaturePlot更改颜色,主题,边框等

    ##画一个文献里常用配色
    library(viridis)
    FeaturePlot(pbmc,features = "CD3D", coord.fixed = T, order = T, cols = viridis(10))
    

    ⚠️设置coord.fixed = T可以固定图片横纵坐标轴
    ⚠️viridis包能和ggplot完美结合使用:离散颜色可用scale_color_viridis() ;连续颜色可用scale_fill_viridis()

    添加主题(ggplot2的主题都可以用,见ggplot2主题函数。)

    #更改颜色
    p1=FeaturePlot(object = pbmc, features = c('CD3D'),
                cols = c("lightgrey" ,"#DE1F1F"),
                slot = "data",label.size = 6,pt.size = 1.2) + 
         guides(color=F)
    
    #还可以将通过rgb颜色改个透明度
    p2=print(FeaturePlot(object = pbmc, features = c('CD3D'),cols = c(rgb(220,212,213,180,maxColorValue = 255),rgb(174,27,52,50, maxColorValue = 255)),slot = "scale.data",label.size = 6,pt.size = 1.5,min.cutoff = "q10", max.cutoff = "q90") + theme(axis.line = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank()))
    p1|p2
    

    5. 气泡图

    直接对接viridis包进行颜色调整

    DotPlot(pbmc, features = markers, group.by = "cell_type") + 
      coord_flip() + 
      scale_color_viridis()+RotatedAxis()
    

    对接ggplot2的theme()进行更精细的调整

    markers <- c('CD3D','CD3E','CD4','CD8A','GZMA','NKG7','CD79A','S100A8','S100A9')
    DotPlot(pbmc, features = markers)+coord_flip()+theme_bw()+#去除背景,旋转图片  
      theme(panel.grid = element_blank(),  
            axis.text.x=element_text(angle=90,hjust = 1,vjust=0.5))+#文字90度呈现  
      scale_color_gradientn(values = seq(0,1,0.2),colours = c('#330066','#336699','#66CC66','#FFCC33'))+#颜色渐变设置  
      labs(x=NULL,y=NULL)+guides(size=guide_legend(order=3))
    

    6. 堆叠小提琴图

    install.packages("remotes")  
    remotes::install_github("lyc-1995/MySeuratWrappers")#通过链接安装包  
    library(MySeuratWrappers)  
    #需要展示的基因  
    markers <- c('CD3D', 'S100A8', 'S100A9', 'CD79A', 'CCL5', 'NKG7', 'GZMA', 'IL32', 'CD4', 'CD8A', 'LTB', 'FCN1', 'MS4A1', 'SPON2','FCER1A','SERPINF1', 'TMEM40', 'CD3E')  
    #颜色:和UMAP图一致
    col <-c('#E5D2DD', '#53A85F', '#F1BB72', '#F3B1A0', '#D6E7A3', '#57C3F3', '#476D87', '#E95C59', '#E59CC4', '#AB3282', '#23452F', '#BD956A', '#8C549C', '#585658', '#9FA3A8', '#E0D4CA', '#5F3D69', '#C5DEBA', '#58A4C3', '#E4C755', '#F7F398', '#AA9A59', '#E63863', '#E39A35', '#C1E6F3', '#6778AE', '#91D0BE', '#B53E2B', '#712820', '#DCC1DD', '#CCE0F5',  '#CCC9E6', '#625D9E', '#68A180', '#3A6963', '#968175')#颜色设置  
    VlnPlot(pbmc, features = markers,  
            stack=T,pt.size=0,  
            cols = col,#颜色  
            direction = "horizontal", #水平作图  
            x.lab = '', y.lab = '')+#横纵轴不标记任何东西  
      theme(axis.text.x = element_blank(),   
            axis.ticks.x = element_blank())#不显示坐标刻度 
    

    相关文章

      网友评论

        本文标题:使用ggplot2优化Seurat绘图

        本文链接:https://www.haomeiwen.com/subject/rsykultx.html