我們生信技能樹的單細胞月更群里面經常看到小伙伴提出的圖片美化需求,這就來看看單細胞umap美化工具吧!
第一種:SCP 包(這個包非常的出色)
關于SCP,我們前面也有一個專門的專輯對其進行了大篇幅的介紹,不知道大家用起來了沒呢?
其學習的官網地址為:https://zhanghao-njmu./SCP/index.html
沒有安裝的,這次就不要再錯過啦:
# 安裝
devtools::install_github("zhanghao-njmu/SCP")
本次,我們使用的數據為來自 GSE128531 數據注釋后的seurat對象,你自己用的時候可以使用任何一個經過了注釋后的seurat對象。
rm(list=ls())
library(COSG)
library(harmony)
library(ggsci)
library(dplyr)
library(future)
library(Seurat)
library(clustree)
library(cowplot)
library(data.table)
library(dplyr)
library(ggplot2)
library(patchwork)
library(stringr)
library(qs)
# 導入數據
sce.all.int <- readRDS('2-harmony/sce.all_int.rds')
sp <- 'human'
head(sce.all.int@meta.data)
load("phe.Rdata")
head(phe)
sce.all.int <- AddMetaData(sce.all.int, metadata = phe)
Idents(sce.all.int) <- "celltype"
table(Idents(sce.all.int))

看一下它對UMAP可視化的厲害之處!
1、先看默認主題一鍵出圖:
################## umap1
library(SCP)
head(sce.all.int@meta.data)
CellDimPlot(sce.all.int, group.by = "celltype", reduction = "UMAP")
這個配色非常CNS,且圖中展示了總細胞數,每個亞群的細胞數這些信息:

2、坐標改成 左下小箭頭,也是大家非常常見的需求!
# 左下小箭頭
CellDimPlot(sce.all.int, group.by = "celltype", reduction = "UMAP", theme_use = "theme_blank")

3、只顯示X、Y軸
還可以一鍵調整整體字體大小:
CellDimPlot(sce.all.int, group.by = "celltype", reduction = "UMAP",
theme_use = ggplot2::theme_classic, theme_args = list(base_size = 16))

上面三個是我最喜歡的ump風格,還有很多其他,總有你的一款:

第二種:Nebulosa(r包)
Nebulosa 是一個基于核密度估計可視化單細胞數據的 R 包,主要通過結合細胞之間的相似性來恢復丟失特征中的信號,從而實現細胞特征的“卷積”。
學習官網:https:///packages/devel/bioc/vignettes/Nebulosa/inst/doc/nebulosa_seurat.html
Nebulosa 的主要功能是 plot_density,讓我們按照以下方式繪制 一些marker基因 的核密度估計圖,展示的marker基因表達水平高低:
# 安裝一下
options(BioC_mirror="https://mirrors./bioconductor")
options("repos"=c(CRAN="https://mirrors./CRAN/"))
BiocManager::install("Nebulosa")
library(Nebulosa)
1、 繪制一個基因PTPRC
這種圖也是在很多CNS級別的文章中出現的:
# 繪制一個基因PTPRC
p1 <- plot_density(sce.all.int, c("PTPRC"),size = 0.3)
p1

2、繪制多個基因
# 同時繪制多個基因
p3 <- plot_density(sce.all.int, c("CD3D","CD4","CD8A","CD68"),size = 0.3)
p3
結果如下:

3、繪制基因共表達
這里可以同時展示兩個基因都表達的地方:
# combine = FALSE 只保留兩個基因都表達的區域
p4 <- plot_density(sce.all.int, c("CD8A", "CCR7"), joint = TRUE,combine = FALSE)
p4

第三種:scCustomize(r包)
學習官網:https://samuel-marsh./scCustomize/index.html
# 安裝
# Base R
install.packages("scCustomize")
繪圖:可以繪制一個marker,也可以展示多個marker:
################## umap4:scCustomize
library(viridis)
library(Seurat)
library(scCustomize)
FeaturePlot_scCustom(seurat_object = sce.all.int, features = c("VWF","CD3E"), order = F)
這種風格很像早期的椒鹽繪圖風格:你看這個著色點是不是很像灑在雞腿上面的椒鹽!(椒鹽風格這個詞我在一篇單細胞文獻中遇到過,現在找不見了,當時還專門在群里問了來著哈哈哈哈)

還可以輕松地修改配色:
# 修改顏色
# Set color palette
pal <- viridis(n = 10, option = "D")
FeaturePlot_scCustom(seurat_object = sce.all.int, features = c("VWF","CD3E"),
colors_use = pal, order = T,pt.size = 0.3)

第四種:ggplot2繪制細胞密度umap圖
在seurat包中有人提出一個繪圖需求:https://github.com/satijalab/seurat/issues/6962

這種圖主要用來處理數據點重疊問題時非常有用,使用 MASS::kde2d()
進行二維核密度估計,并通過等高線顯示結果,geom_density_2d()
繪制等高線,而 geom_density_2d_filled()
繪制填充的等高線帶。
鏈接:https://ggplot2./reference/geom_density_2d.html
library(cetcolor)
library(Seurat)
library(ggplot2)
# 設置顏色
scale.col <- cet_pal(16, name = "fire")
# generate UMAP plot
pl1 <- UMAPPlot(sce.all.int, combine = FALSE) # returns full ggplot object
pl1
# make plot
pl1[[1]] &
stat_density_2d(aes_string(x = "umap_1", y = "umap_2", fill = "after_stat(level)"),
linewidth = 0.2, geom = "density_2d_filled",
colour = "ivory", alpha = 0.4, n = 150, h = c(1.2, 1.2)) &
scale_fill_gradientn(colours = scale.col) &
DarkTheme()
這種風格很獨特:

第五種:ggpointdensity(r包)
在二維坐標系中可視化數據點有幾種方法:如果你有大量的數據點重疊在一起,geom_point()
無法為你提供重疊點的數量估計。
剛剛上面介紹的geom_density2d()
和 geom_bin2d()
可以解決這個問題,但它們使得無法調查個別異常點,而這些異常點可能具有研究價值。
geom_pointdensity()
旨在通過結合兩者的優點來解決這個問題:各個點根據鄰近點的數量進行著色。這使得你既能看到整體分布,也能看到個別點。
學習官網:https://github.com/LKremer/ggpointdensity
細胞密度圖:
# 安裝
install.packages("ggpointdensity")
library(ggpointdensity)
# 提取umap坐標數據
dat <- Embeddings(sce.all.int, reduction = "umap")
head(dat)
# umap_1 umap_2
# SC67mf2_AAACCTGAGAGTAATC -3.541568 5.127461
# SC67mf2_AAACCTGAGCGCTTAT -6.623588 -3.025122
# SC67mf2_AAACCTGAGGACACCA -4.586405 1.513219
ggplot(data = dat, mapping = aes(x = umap_1, y = umap_2)) +
geom_pointdensity() +
scale_color_viridis()

當然,它還可以展示marker特征基因表達:
# 提取umap坐標以及特征基因表達
df <- FetchData(object =sce.all.int, vars = c("umap_1", "umap_2", "CD3D"), layer = "data")
head(df)
# umap_1 umap_2 CD3D
# SC67mf2_AAACCTGAGAGTAATC -3.541568 5.127461 0.000000
# SC67mf2_AAACCTGAGCGCTTAT -6.623588 -3.025122 1.430228
# SC67mf2_AAACCTGAGGACACCA -4.586405 1.513219 0.000000
p <- ggplot(df, aes(x= umap_1, y= umap_2 )) +
geom_point(data = df %>% filter(CD3D == 0), color = "#440154FF", size = 0.6) +
ggpointdensity::geom_pointdensity(data = df %>% filter(CD3D > 0), size = 0.6) +
viridis::scale_color_viridis() +
theme_classic(base_size = 14) +
labs(color= "CD3D")
p
結果如下:

上面哪一款是你的菜?可以在評論區大聲說出來(愛就要勇敢說出來!)。
友情宣傳:
生信入門&數據挖掘線上直播課2025年1月班
時隔5年,我們的生信技能樹VIP學徒繼續招生啦
滿足你生信分析計算需求的低價解決方案