Closed ixxmu closed 12 months ago
上次广告新包上线,其实一年前就写了,当时我叫这个包为scplot
,后来发现这包名已经被别人叫了,于是改名ggsc
。当然先卖个关子,功能远不止今天要讲的。
我们直接上代码,从人见人爱的Seurat
开始,这个包让几乎所有考研复试的小朋友都说自己跑过单细胞的分析:
library(Seurat)
dir = "filtered_gene_bc_matrices/hg19"
pbmc.data <- Read10X(data.dir = dir)
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells=3, min.features=200)
pbmc
## An object of class Seurat
## 13714 features across 2700 samples within 1 assay
## Active assay: RNA (13714 features, 0 variable features)
## Normalizing the data
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize",
scale.factor = 10000)
pbmc <- NormalizeData(pbmc)
## Identify the 2000 most highly variable genes
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
## In addition we scale the data
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc),
verbose = FALSE)
pbmc <- FindNeighbors(pbmc, dims = 1:10, verbose = FALSE)
pbmc <- FindClusters(pbmc, resolution = 0.5, verbose = FALSE)
pbmc <- RunUMAP(pbmc, dims = 1:10, umap.method = "uwot", metric = "cosine")
## Run tSNE
pbmc <- RunTSNE(pbmc, reduction = "pca", dims=1:5, tsne.method = "Rtsne")
## Assigning cell type identity to clusters
new.cluster.ids <- c("Naive CD4 T", "CD14+ Mono", "Memory CD4 T", "B", "CD8 T",
"FCGR3A+ Mono", "NK", "DC", "Platelet")
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)
Seurat版本:
DimPlot(pbmc, reduction = "umap",
label = TRUE, pt.size = 0.5)
ggsc版本:
library(ggplot2)
library(ggsc)
sc_dim(pbmc) + sc_dim_geom_label()
就是sc_dim
画散点,sc_dim_geom_label
画标签。看上去我们除了搞个人见人爱的坐标轴之外,画出来一样。
然而我们能够更灵活:
sc_dim(pbmc) +
sc_dim_geom_label(geom = shadowtext::geom_shadowtext,
color='black', bg.color='white')
比如用什么图层来画细胞标签,可以传,这里用我写的shadowtext
包来画,字就凸显出来了。
Seurat版本:
features = c("MS4A1", "GNLY", "CD3E",
"CD14", "FCER1A", "FCGR3A",
"LYZ", "PPBP", "CD8A")
FeaturePlot(pbmc,'CD4')
ggsc版本:
sc_feature(pbmc, 'CD4')
如果要同时画几个呢:
Seurat版本:
FeaturePlot(pbmc, features)
Seurat我感觉不好是它是拼图的,表达量的颜色标尺是不一样的,不方便比较,所以我出的是分面,标尺一致,基因的表达量,除了在细胞类型分布的区别之外,谁高谁低一目了然。
ggsc版本:
sc_feature(pbmc, features)
当然分面也有分面的坏处,如果一起展示的基因的表达量实在是具有量级上的差别,那统一标尺,会有些基因的表达量根本没法看。那换成Seurat那种行不?这有何难。
ff <- lapply(features, sc_feature, object=pbmc)
aplot::plot_list(gglist= ff, ncol=3)
无非是独自出图,然后拼。
好了,前面是和Seurat类比的一个函数,应该说更强大,但没有体现出图形语法是不是?没问题的,我们能够做到真正的降维图画了,再在上面把你选中的基因画出来。比如这样子:
sc_dim(pbmc) +
sc_dim_geom_feature(pbmc, 'CD4', color='black')
多个基因同样适用:
sc_dim(pbmc, alpha=.3) +
ggnewscale::new_scale_color() +
sc_dim_geom_feature(pbmc, features, mapping=aes(color=features)) +
scale_color_viridis_d()
我们可以把背景换成灰色,高亮选中的基因,而选中的基因,除了用表达量,你还可以用别的变量来映射,任君选择:
sc_dim(pbmc, alpha=.3, reduction = 'tsne', color='grey50') +
sc_dim_geom_feature(pbmc, features, mapping=aes(color=features))
它提供给我们的,是更大的自由度,和灵活的语法,当然也带来了更多的可能性。以及有什么需求,向我们提,经常能够实现愿望。我当时写这个包,其中一个原因就是我觉得Seurat画的图太丑,真的很丑。
未完待续...
https://mp.weixin.qq.com/s/VuEKNeA9q-ULGmqHILsBIQ