zl程序教程

您现在的位置是:首页 >  其他

当前栏目

跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算

2023-04-18 16:14:40 时间

umap/tsne图作为单细胞转录组的王牌图形之一,当seurat 或者 singleR 直接绘制的umap/tsne 图需要调整的时候,可能比较难调整,当然AI或者PS都可以办到 。但是本次主要分享使用ggplot2进行可视化,能比较方便的进行后期的微调 ,也学习回顾了ggplot2的基本参数。

文末有代码和数据的获取方式。

一 加载数据 R包

读取singleR注释后的数据作为示例数据

#
library(SingleR)
library(Seurat)
library(tidyverse)
library(ggrepel)

#pbmc_tutorial_singleR.RData
load("pbmc_tutorial_singleR.RData")
#简单的查看
pbmc

#An object of class Seurat 
#13714 features across 2638 samples within 1 assay 
#Active assay: RNA (13714 features, 2000 variable features)
# 3 dimensional reductions calculated: pca, umap, tsne

seurat 包中`DimPlot`函数一行代码绘制umap图

DimPlot(pbmc, group.by = c("labels"),reduction = "umap")

二 ggplot2绘制umap图

2.1 查看绘制umap的数据

可以先str(pbmc),然后找需要的数据

umap图所需的数据就是每个cell的坐标以及cluster或者celltype信息,然后绘制点图

umap = pbmc@reductions$umap@cell.embeddings %>%  #坐标信息
  as.data.frame() %>% 
  cbind(cell_type = pbmc@meta.data$labels) # 注释后的label信息 ,改为cell_type

head(umap)

UMAP_1 UMAP_2 cell_type

AAACATACAACCAC-1 -4.577857 1.650203 T_cells

AAACATTGAGCTAC-1 -2.813911 -11.897462 B_cell

AAACATTGATCAGC-1 -1.684490 3.302480 T_cells

AAACCGTGCTTCCG-1 12.694498 2.098798 Monocyte

AAACCGTGTATGCG-1 -9.829201 3.982013 NK_cell

AAACGCACTGGTAC-1 -2.908319 1.249230 T_cells

2.2 ggplot2 绘制umap图

调整color,颜色列表来自于https://www.jianshu.com/p/67d2decf5517

allcolour=c("#DC143C","#0000FF","#20B2AA","#FFA500","#9370DB","#98FB98","#F08080","#1E90FF","#7CFC00","#FFFF00",            "#808000","#FF00FF","#FA8072","#7B68EE","#9400D3","#800080","#A0522D","#D2B48C","#D2691E","#87CEEB","#40E0D0","#5F9EA0",            "#FF1493","#0000CD","#008B8B","#FFE4B5","#8A2BE2","#228B22","#E9967A","#4682B4","#32CD32","#F0E68C","#FFFFE0","#EE82EE",            "#FF6347","#6A5ACD","#9932CC","#8B008B","#8B4513","#DEB887")
p <- ggplot(umap,aes(x= UMAP_1 , y = UMAP_2 ,color = cell_type)) +  geom_point(size = 1 , alpha =1 )  +  scale_color_manual(values = allcolour)p

看一下和文章SCI 截图的差别在哪?

嗯?好像差不多嘛 ,无非就是

A:主题部分(去掉背景,去掉网格线,去掉横纵坐标) ;

B:legend部分(调整legend ,去掉背景灰色,调整字体)

C:注释部分(坐标轴标到左下角,图中标示标签)三部分。

知道该调整哪些了,调整就一步步来就是了。

三 ggplot2-umap-调整

3.1 调整umap图 - theme

主题的调整比较简单,去掉网格线,坐标轴和背景色即可

p2 <- p  +
  theme(panel.grid.major = element_blank(), #主网格线
        panel.grid.minor = element_blank(), #次网格线
        panel.border = element_blank(), #边框
        axis.title = element_blank(),  #轴标题
        axis.text = element_blank(), # 文本
        axis.ticks = element_blank(),
        panel.background = element_rect(fill = 'white'), #背景色
        plot.background=element_rect(fill="white"))
p2

更多theme的设置详见ggplot2|theme主题设置,详解绘图优化-“精雕细琢”

3.2 调整umap图 - legend

legeng部分去掉legend.title后,调整标签大小,标签点的大小以及 标签之间的距离

p3 <- p2 +         
        theme(
          legend.title = element_blank(), #去掉legend.title 
          legend.key=element_rect(fill='white'), #
        legend.text = element_text(size=20), #设置legend标签的大小
        legend.key.size=unit(1,'cm') ) +  # 设置legend标签之间的大小
  guides(color = guide_legend(override.aes = list(size=5))) #设置legend中 点的大小 
p3

更多legend设置详见ggplot2 |legend参数设置,图形精雕细琢

3.3 调整umap图 - annotation

坐标轴放到左下角可以通过ggplot2添加箭头和文本实现。

p4 <- p3 + 
  geom_segment(aes(x = min(umap$UMAP_1) , y = min(umap$UMAP_2) ,
                   xend = min(umap$UMAP_1) +3, yend = min(umap$UMAP_2) ),
               colour = "black", size=1,arrow = arrow(length = unit(0.3,"cm")))+ 
  geom_segment(aes(x = min(umap$UMAP_1)  , y = min(umap$UMAP_2)  ,
                   xend = min(umap$UMAP_1) , yend = min(umap$UMAP_2) + 3),
               colour = "black", size=1,arrow = arrow(length = unit(0.3,"cm"))) +
  annotate("text", x = min(umap$UMAP_1) +1.5, y = min(umap$UMAP_2) -1, label = "UMAP_1",
           color="black",size = 3, fontface="bold" ) + 
  annotate("text", x = min(umap$UMAP_1) -1, y = min(umap$UMAP_2) + 1.5, label = "UMAP_2",
           color="black",size = 3, fontface="bold" ,angle=90) 
p4

那如果想把注释加到点之上怎么办呢?

(1)直接使用label 添加,需要先给每个cluster一个单独的坐标,本示例中使用此方法。

(2)text 根据cluster的位置,手动添加,需要尝试,倒是效果会好一些。

更多注释详见ggplot2-annotation|画图点“精”,让图自己“解释”

3.4 调整umap图 - repel - labels

1)计算每个cluster的median 坐标位置

cell_type_med <- umap %>%
  group_by(cell_type) %>%
  summarise(
    UMAP_1 = median(UMAP_1),
    UMAP_2 = median(UMAP_2)
  )

2)geom_label_repel 添加注释

使用ggrepel包的repel函数可以使注释的标签不重叠。

library(ggrepel)p4 +geom_label_repel(aes(label=cell_type), fontface="bold",data = cell_type_med,
                   point.padding=unit(0.5, "lines"))

3)去掉legend

p4 +
geom_label_repel(aes(label=cell_type), fontface="bold",data = cell_type_med,
                   point.padding=unit(0.5, "lines")) +
  theme(legend.position = "none")

OK ,以上就是使用ggplot2绘制umap图并进行调整的过程,这样就可以根据需求进行调整了。