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

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

本文首发于“生信补给站”公众号  https://mp.weixin.qq.com/s/dgsAjDnLOtzgejzzr4RcFw


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图并进行调整的过程,这样就可以根据需求进行调整了。

相关文章
|
6月前
|
存储 算法 图形学
【计算机图形学】实验二 用扫描线算法实现多边形填充
【计算机图形学】实验二 用扫描线算法实现多边形填充
175 2
|
6月前
|
算法 数据可视化
圆填充( CIRCLE PACKING)算法圆堆图圆形空间填充算法可视化
圆填充( CIRCLE PACKING)算法圆堆图圆形空间填充算法可视化
|
6月前
|
数据可视化
绘制GGPLOT2双色XY区间面积图组合交叉折线图数据可视化
绘制GGPLOT2双色XY区间面积图组合交叉折线图数据可视化
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
R绘制多彩的森林图:基于ggplot2
R绘制多彩的森林图:基于ggplot2
355 1
|
数据挖掘 数据处理 索引
跟SCI学heatmap|文章中常见复杂热图的绘制方式(含代码),干货较多,建议耐心一下
跟SCI学heatmap|文章中常见复杂热图的绘制方式(含代码),干货较多,建议耐心一下
734 0
|
数据挖掘
ggplot2| 绘制KEGG气泡图
ggplot2| 绘制KEGG气泡图
411 0
|
机器学习/深度学习 算法 数据可视化
R绘图案例|基于分面的面积图绘制
R绘图案例|基于分面的面积图绘制
10866 0
|
数据处理 图形学
ggplot 分面的细节调整汇总
ggplot 分面的细节调整汇总
235 0
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2三角热图按照指定的角度旋转
跟着Nature学作图:R语言ggplot2三角热图按照指定的角度旋转