實現(xiàn)基于t-SNE坐標(biāo),然后用某item的值來體現(xiàn)在顏色上,同時顯示基于item值過濾后的密度圖

image.png
數(shù)據(jù)集如下:

image.png
現(xiàn)在用數(shù)據(jù)集的tSNE_1列作為點(diǎn)的x坐標(biāo),tSNE_2列作為點(diǎn)的y坐標(biāo),顯示HALLMARK_SPERMATOGENESIS列每個點(diǎn)的分?jǐn)?shù)
ggplot2簡單定義一個點(diǎn)圖疊加密度圖的函數(shù)
Densityplt2 <- function(data,x,y,score,densitySelect){
samples = data; X=x ; Y=y ; DensitySelect = densitySelect
library(ggplot2)
jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000")) #色盤
##核心繪圖
max_expression=max(samples[,Score]) #點(diǎn)對應(yīng)Score的最大值
min_expression=min(samples[,Score]) #點(diǎn)對應(yīng)Score的最小值
arrondi <- function (x) ifelse(x>0, ifelse(x-trunc(x)>=0.5,trunc(x)+1,trunc(x)), ifelse(x-trunc(x)<=-0.5,trunc(x)-1,trunc(x)))
max_tsneX=arrondi(max(samples[,X]))+1 #設(shè)置X軸最大刻度
min_tsneX=arrondi(min(samples[,X]))-1 #設(shè)置X軸最小刻度
max_tsneY=arrondi(max(samples[,Y]))+1 #設(shè)置Y軸最大刻度
min_tsneY=arrondi(min(samples[,Y]))-1 #設(shè)置Y軸最小刻度
#############
p <- ggplot(samples, aes_string(x = X, y = Y)) +
#基于score繪制密度圖
stat_density_2d(data=samples[samples[,Score]>DensitySelect,], aes(fill=..level..,alpha=..level..), geom='polygon', colour='darkgrey', n=50) +
#繪制點(diǎn)圖
geom_jitter(aes(x = samples[,X], y = samples[,Y], color = samples[,Score]), size=1, alpha=0.7) +
###樣式調(diào)整
labs(color = "Score") + # color legend
scale_colour_gradientn(colours = jet.colors(10), limits=c(min_expression, max_expression)) + #點(diǎn)對應(yīng)的Value映射到顏色
xlab(X) +
ylab(Y) +
theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + # remove grid
scale_alpha_continuous(range=c(0.1,0.5))+
scale_x_continuous(limits = c(min_tsneX, max_tsneX))+ #設(shè)置X軸刻度范圍
scale_y_continuous(limits = c(min_tsneY, max_tsneY))+ #設(shè)置Y軸刻度范圍
theme(
plot.title = element_text(size = 14),
axis.text.x = element_text(size = 14, color='black'),
axis.text.y = element_text(size = 14, color='black'),
strip.text.x = element_text(size = 14, color='black',angle=90),
strip.text.y = element_text(size = 14, color='black',angle=90),
axis.title.x = element_text(size = 14, color='black'),
axis.title.y = element_text(size = 14, angle=90))
return(p)
}
加載數(shù)據(jù)表(DataFrame):samples <- read.table("*.tsv",sep = '\t',header = T,row.names = 1)
然后調(diào)用函數(shù)Densityplt2(data = samples,score = "HALLMARK_SPERMATOGENESIS",x = "tSNE_1",y = "tSNE_2",densitySelect = 4)選用數(shù)據(jù)表的“HALLMARK_SPERMATOGENESIS”列顯示樣本分?jǐn)?shù)
方法引用自文獻(xiàn):
Pont, Frédéric et al. “Single-Cell Signature Explorer for comprehensive visualization of single cell signatures across scRNA-seq datasets.” Nucleic acids research vol. 47,21 (2019): e133. doi:10.1093/nar/gkz601