作者:ahworld
鏈接:空轉(zhuǎn)分析代碼備忘錄:seurat可視化代碼雕琢
來源:微信公眾號seqyuan
著作權(quán)歸作者所有横堡,任何形式的轉(zhuǎn)載都請聯(lián)系作者。
簡介
目前常見的空間轉(zhuǎn)錄組數(shù)據(jù)技術(shù)平臺有:
- 10X Visium
- 10X Visium CytAssist
- stereo-seq
seurat軟件以其簡單易用性命贴,通過特定的矩陣格式轉(zhuǎn)換食听,能夠兼容大多數(shù)平臺的數(shù)據(jù)格式污茵。為了發(fā)表文章,圖片美化的需要迹蛤,在做項目過程中經(jīng)常用到一些優(yōu)化的代碼襟士,在這里做個備忘盗飒。
1. 可視化圖片保持空轉(zhuǎn)切片長寬比
有時候我們做空轉(zhuǎn)分析采用SpatialFeaturePlot
或SpatialDimPlot
畫圖陋桂,經(jīng)常發(fā)現(xiàn)圖片的長寬比例與原始切片相比有壓縮或者拉伸,下面的代碼能夠幫助我們解決這個問題宣渗。
- 數(shù)據(jù)來源:華大sterero-seq公開數(shù)據(jù)
- 數(shù)據(jù)網(wǎng)址:http://116.6.21.110:8090/share/dd965cba-7c1f-40b2-a275-0150890e005f
- 芯片:SS200000135TL_D1.tissue.gem.gz
下面圖是這個芯片采用stereropy軟件可視化的效果(讓我們對這個切片有一個感官的了解)梨州。
我們下載處理了這個STO切片的數(shù)據(jù),設(shè)置bin50
轉(zhuǎn)換成了seurat能夠讀取的rds
對象摊唇。
SS200000135TL_D1.tissue.gem.gz轉(zhuǎn)換成bin50分辨率seurat rds的過程不是這篇文章的內(nèi)容。
suppressPackageStartupMessages({
library(Seurat)
library(ggplot2)
library(viridis)
library(patchwork)
library(RColorBrewer)
})
# 讀取數(shù)據(jù)
rds <- readRDS('./mouse_brain_sto.rds')
圖片長寬比修正
下面左圖為正秤行颍可視化結(jié)果岛请,正常的可視化會使圖片的長寬比失真,我們加一些修飾代碼使可視化的結(jié)果保持切片的長寬比崇败。
options(repr.plot.width=7, repr.plot.height=4)
p1 <- SpatialFeaturePlot(rds, features = "nCount_Spatial")
p2 <- p1 + theme_gray()+xlab("")+ylab("")+theme(axis.text = element_blank(),axis.ticks=element_blank())
p1+p2
[圖片上傳失敗...(image-4974cd-1706604409823)]
去除point黑色邊圈
默認的可視化會把spot加上黑邊,當(dāng)spot點很密集的時候整個圖片會顯示的比較暗缩膝,可以設(shè)置stroke=NA
來使圖片變得明亮岸霹。
p1 <- SpatialDimPlot(rds)
p2 <- SpatialDimPlot(rds, stroke=NA)
p2 <- p2 + guides(color=guide_legend(override.aes = list(size=8), ncol=2))
p2 <- p2 + theme_gray()+xlab("")+ylab("")
p2 <- p2 + theme(axis.text = element_blank(),axis.ticks=element_blank())
p1+p2
2. 用seurat單細胞的函數(shù)實現(xiàn)空轉(zhuǎn)spot分布
- 在seurat中
FeaturePlot
,DimPlot
是單細胞數(shù)據(jù)可視化的函數(shù) -
SpatialDimPlot
,SpatialFeaturePlot
是空轉(zhuǎn)數(shù)據(jù)可視化的函數(shù)
下面的操作可以使空轉(zhuǎn)的數(shù)據(jù)能夠用單細胞的函數(shù)(FeaturePlot
, DimPlot
)進行可視化,以達到高度定制圖片的目的痛黎。
有這個想法,是因為前一陣做數(shù)據(jù)探索時湖饱,發(fā)現(xiàn)下載的一篇宮頸癌STO的文章數(shù)據(jù)就這這種結(jié)構(gòu),能夠非常方便的進行定制化修改蚓庭。
spatial_corr <- rds@images$slice1@coordinates[,c('col', 'row')]
colnames(spatial_corr) <- c('s_1', 's_2')
spatial_corr <- as.matrix(spatial_corr)
rds[["spatial"]] <- CreateDimReducObject(embeddings=spatial_corr, key = "s_", assay = "Spatial")
options(repr.plot.width=10.5, repr.plot.height=4)
p1 <- FeaturePlot(rds, features = "nCount_Spatial", reduction='spatial') +
scale_y_reverse() +
scale_colour_viridis(option="inferno") + theme_void()
p2 <- FeaturePlot(rds, features = "Neurod6", reduction='spatial') +
scale_y_reverse() +
scale_colour_viridis(option="D") + theme_void()
mycolor <- colorRampPalette(brewer.pal(8,'Set2'))(18)
p3 <- DimPlot(rds, reduction='spatial', cols=mycolor) +
guides(color=guide_legend(override.aes = list(size=6), ncol=2)) +
theme_void() + scale_y_reverse()
p1+p2+p3+plot_layout(ncol=3, nrow=1)
Nature Genetics 文章圖風(fēng)格復(fù)現(xiàn)
前面提到的宮頸癌STO數(shù)據(jù)就是來源于下面要復(fù)現(xiàn)的文章旗笔,文章在2023年3月發(fā)表在Nature Genetics雜志拄踪,切片數(shù)據(jù)為sterero-seq平臺產(chǎn)生,作者提供的是seurat的rds對象格式供研究者使用撮弧。文章doi: 10.1038/s41588-023-01570-0
下面圖是文章中的原圖截圖
這個對象的空間信息并沒有保存在images
里而是像我們前面一樣保存在了reductions
里面姚糊,關(guān)鍵字是spatial
。所以我們能用seurat中單細胞的可視化函數(shù)對這個數(shù)據(jù)進行可視化救恨。
suppressPackageStartupMessages({
library(Seurat)
library(ggplot2)
library(viridis)
library(patchwork)
library(RColorBrewer)
library(paletteer)
})
Newf <- function(RDS, feature, ad=1, limits=1){
viridis_plasma_light_high <- as.vector(x = paletteer_c(palette = "viridis::inferno", n = 250, direction = 1))
viridis_plasma_light_high <- c( rep("black", ad), viridis_plasma_light_high)
p <- FeaturePlot(RDS, features = feature, reduction='spatial')
p <- p + theme_void()+ theme(
axis.ticks=element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.line = element_blank(),
panel.border = element_rect(color = "white", fill = NA, size =2),
) +
DarkTheme() +
xlab(NULL) +
ylab(NULL)
if (length(limits)==1){
p <- p + scale_colour_gradientn(colours=viridis_plasma_light_high, na.value = "black")
}else{
p <- p + scale_colour_gradientn(colours=viridis_plasma_light_high, na.value = "black",limits=limits)
}
return (p)
}
# 讀取下載的數(shù)據(jù)
ca <- readRDS('spatial.rds')
p1 <- Newf(ca, "CD4 T")
p2 <- Newf(ca, "CD8 T")
p3 <- Newf(ca, "B")
p4 <- Newf(ca, "DC")
p5 <- Newf(ca, "Macro")
p6 <- Newf(ca, "Endothelial")
p7 <- Newf(ca, "Fibroblast")
p8 <- Newf(ca, "Program_C6")
p9 <- Newf(ca, "Program_C7")
options(repr.plot.width=8.5, repr.plot.height=10)
p <- p1+p2+p3+p4+p5+p6+p7+p8+p9 + plot_layout(ncol=3, nrow=3)
p
#ggsave("out.pdf", p, w=8.5, h=10)
trick: 和文章圖還有一點差別肠槽,這個差別就是為什么我們定義的Newf
函數(shù)有一個ad
參數(shù)和背景用黑色原因,設(shè)置ad參數(shù)能夠在colorbar系列的小值增加黑色嘴拢,這樣一些低表達的spot就被隱藏在黑色背景里了寂纪,當(dāng)我們要突出切片輪廓時席吴,可以設(shè)置ad=0
捞蛋。
總結(jié)以上用到的備忘知識點:
- 還原圖片的長寬比
- 黑圈消失術(shù)
- legend點放大術(shù)
- rds對象根據(jù)自定義坐標(biāo)增加reduction
- 低表達spot隱藏術(shù)