上一篇文章深入學習了Monocle2包,這次來繼續學習Seurat包。
Seurat官方網站:https://satijalab.org/seurat/v3.1/pbmc3k_tutorial.html
Seurat包是個什么包?
Seurat是一個用于質量控制、分析和探索單細胞RNA-seq數據的R包。Seurat使用戶能夠鑒定和解釋來自單細胞轉錄本測定的異質性來源,并可以整合成多種類型的單細胞數據。
安裝Seurat
使用之前先安裝。目前最新的是3.0版本,你可以直接在R里安裝(要求R是3.4版本或更高),super easy:
> install.packages('Seurat')
> library(Seurat)
如果有些同學想安裝低版本的怎么辦呢?比如2.3.4這個版本:
> source("https://z.umn.edu/archived-seurat")
如果你還想安裝更老的版本,就需要如下代碼:
> install.packages('devtools')
# 替換成2.3.0版本
>devtools::install_version(package = 'Seurat', version = package_version('2.3.0'))
> library(Seurat)
建立Seurat對象
在這個教程里,我們將分析來自10X Genomics外周血單核細胞(PBMC)數據,這個dataset是用Illumina NextSeq 500平臺進行測序,包含了2700個細胞。原始數據在這里下載:here.
這個原始數據來自CellRanger的處理,Cellranger返回一個UMI的count矩陣。矩陣里的列是細胞,行是基因。接下來我們用count矩陣創建Seurat對象。這個對象就好比一個容器,里面裝著單細胞數據集,比如count矩陣,PCA,聚類結果等等。舉個栗子:count matrix 儲存在pbmc[["RNA"]]@counts里。
> library(dplyr)
> library(Seurat)
# 導入PBMC數據,用Read10×這個參數
> pbmc.data <- Read10X(data.dir = "../data/pbmc3k/filtered_gene_bc_matrices/hg19/")
# 起始的Seurat對象是原始數據,沒有經過標準化的
> 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)
如果在R studio打開后,大概長這樣:
那我想看看具體的某個基因在這個矩陣里每個細胞的表達情況怎么看呢?
> pbmc.data[c("CD3D", "TCL1A", "MS4A1"), 1:30]
3 x 30 sparse Matrix of class "dgCMatrix"
[[ suppressing 30 column names 'AAACATACAACCAC', 'AAACATTGAGCTAC', 'AAACATTGATCAGC' ... ]]
CD3D 4 . 10 . . 1 2 3 1 . . 2 7 1 . . 1 3 . 2 3 . . . . . 3 4 1 5
TCL1A . . . . . . . . 1 . . . . . . . . . . . . 1 . . . . . . . .
MS4A1 . 6 . . . . . . 1 1 1 . . . . . . . . . 36 1 2 . . 2 . . . .
這里的點代表0,意思是這些基因在這個細胞里沒有被檢測到。因為大部分基因在單細胞RNA-seq矩陣里都是0,所以Seurat盡可能使用稀疏矩陣(sparse-matrix)表示。這為Drop-seq/inDrop/10x數據節省了大量內存和速度。
標準的預處理工作流程
質量控制,選擇需要分析的細胞
Seurat允許你簡單的過濾一下你的細胞,質控的一般指標包括:
- 在每個細胞里檢測到的基因
- 低質量細胞或者空的droplets只有非常少量的基因
- 細胞doublets 或者 multiplets 有非常高的基因count數
- 在一個細胞內檢測到的分子數
- 讀取到線粒體基因組的比例
- 低質量/死細胞通常有很高的線粒體污染
- 我們使用“PercentageFeatureSet”函數計算線粒體QC指標
- 使用所有以“MT-”開頭的基因作為線粒體基因
# 把表達矩陣里的線粒體QC單獨存放在Seurat對象里,等于添加一列到metadata的對象里
> pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
添加后我們可以看一下,是否添加成功了:
#看metadata的前5行
> head(pbmc@meta.data, 5)
orig.ident nCount_RNA nFeature_RNA percent.mt
AAACATACAACCAC pbmc3k 2419 779 3.0177759
AAACATTGAGCTAC pbmc3k 4903 1352 3.7935958
AAACATTGATCAGC pbmc3k 3147 1129 0.8897363
AAACCGTGCTTCCG pbmc3k 2639 960 1.7430845
AAACCGTGTATGCG pbmc3k 980 521 1.2244898
我們還可以可視化QC指標,并用它們來過濾細胞:
(1)將unique基因count數超過2500,或者小于200的細胞過濾掉。
(2)把線粒體count數占5%以上的細胞過濾掉
> VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
我們還可以用FeatureScatter函數來可視化特征-特征之間的關系,可以使用Seurat對象里的任何東西,如對象中的列、PC分數等。
> plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
> plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
> CombinePlots(plots = list(plot1, plot2))
> pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
標準化數據
在去除掉不想要的細胞后,就可以標準化數據了。在默認情況下,我們使用global-scaling標準化方法,稱為“LogNormalize”,這種方法是利用總的表達量對每個細胞里的基因表達值進行標準化,乘以一個scale factor(默認值是10000),再用log轉換一下。標準化后的數據存放在pbmc[["RNA"]]@data里。
> pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
當然上面的代碼中,我們用的參數都是默認值,在這種情況下,上面這行代碼也可以寫成更簡單的形式:
> pbmc <- NormalizeData(pbmc)
鑒定高度變化的基因
接下來我們要計算在pbmc里細胞之間變化度很高的基因集(這些基因在一些細胞中高表達,在另一些細胞中低表達),這一步用FindVariableFeatures函數來執行。默認情況下,每個dataset返回2,000個基因。這些基因將用于下游分析,如PCA。
> pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
之后從這些基因里挑選10個變化程度最高的基因:
> top10 <- head(VariableFeatures(pbmc), 10)
下面是將這些基因可視化出來,并把top10的基因名稱標記出來:
> plot1 <- VariableFeaturePlot(pbmc)
> plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE)
When using repel, set xnudge and ynudge to 0 for optimal results
> CombinePlots(plots = list(plot1, plot2))
scaling the data(數據比例縮放)
接下來,用一個線性變換(“縮放scaling”)。這是在降維前(例如PCA)一個標準的預處理步驟,用ScaleData函數:
(1)shift每個基因的表達,使細胞間的平均表達為0
(2)縮放每個基因的表達,使細胞間的差異為1
這一步給予下游分析同等的權重,這樣那些非常高表達的基因就不會掩蓋其他基因的變化,其結果存儲在pbmc[["RNA"]]@scale.data中。
> all.genes <- rownames(pbmc)
> pbmc <- ScaleData(pbmc, features = all.genes)
Centering and scaling data matrix
|====================================================================| 100%
scaling是Seurat流程中的一個重要步驟,但僅限于將作為PCA input的基因。因此,ScaleData中的默認值只是對前面確定的2000個基因執行縮放。要做到這一點,可以忽略前面函數調用中的features參數,用下面簡單的代碼就行:
pbmc < - ScaleData (pbmc)
這樣你的PCA和聚類結果將不受影響。然而,Seurat heatmap需要對heatmap中的基因進行縮放,以確保高表達基因不會主導heatmap。為了確保我們在后面的熱圖中不會遺漏任何基因,我們將在本教程中縮放了所有基因。
線性降維
接下來我們對scaling后的數據進行PCA,在默認值下,只對前面選出的2000個基因基因降維,但是你也可以選擇想要降維的基因集。
> pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))
PC_ 1
Positive: CST3, TYROBP, LST1, AIF1, FTL, FTH1, LYZ, FCN1, S100A9, TYMP
FCER1G, CFD, LGALS1, S100A8, CTSS, LGALS2, SERPINA1, IFITM3, SPI1, CFP
PSAP, IFI30, SAT1, COTL1, S100A11, NPC2, GRN, LGALS3, GSTP1, PYCARD
Negative: MALAT1, LTB, IL32, IL7R, CD2, B2M, ACAP1, CD27, STK17A, CTSW
CD247, GIMAP5, AQP3, CCL5, SELL, TRAF3IP3, GZMA, MAL, CST7, ITM2A
MYC, GIMAP7, HOPX, BEX2, LDLRAP1, GZMK, ETS1, ZAP70, TNFAIP8, RIC3
PC_ 2
Positive: CD79A, MS4A1, TCL1A, HLA-DQA1, HLA-DQB1, HLA-DRA, LINC00926, CD79B, HLA-DRB1, CD74
HLA-DMA, HLA-DPB1, HLA-DQA2, CD37, HLA-DRB5, HLA-DMB, HLA-DPA1, FCRLA, HVCN1, LTB
BLNK, P2RX5, IGLL5, IRF8, SWAP70, ARHGAP24, FCGR2B, SMIM14, PPP1R14A, C16orf74
Negative: NKG7, PRF1, CST7, GZMB, GZMA, FGFBP2, CTSW, GNLY, B2M, SPON2
CCL4, GZMH, FCGR3A, CCL5, CD247, XCL2, CLIC3, AKR1C3, SRGN, HOPX
TTC38, APMAP, CTSC, S100A4, IGFBP7, ANXA1, ID2, IL32, XCL1, RHOC
PC_ 3
Positive: HLA-DQA1, CD79A, CD79B, HLA-DQB1, HLA-DPB1, HLA-DPA1, CD74, MS4A1, HLA-DRB1, HLA-DRA
HLA-DRB5, HLA-DQA2, TCL1A, LINC00926, HLA-DMB, HLA-DMA, CD37, HVCN1, FCRLA, IRF8
PLAC8, BLNK, MALAT1, SMIM14, PLD4, LAT2, IGLL5, P2RX5, SWAP70, FCGR2B
Negative: PPBP, PF4, SDPR, SPARC, GNG11, NRGN, GP9, RGS18, TUBB1, CLU
HIST1H2AC, AP001189.4, ITGA2B, CD9, TMEM40, PTCRA, CA2, ACRBP, MMD, TREML1
NGFRAP1, F13A1, SEPT5, RUFY1, TSC22D1, MPP1, CMTM5, RP11-367G6.3, MYL9, GP1BA
PC_ 4
Positive: HLA-DQA1, CD79B, CD79A, MS4A1, HLA-DQB1, CD74, HLA-DPB1, HIST1H2AC, PF4, TCL1A
SDPR, HLA-DPA1, HLA-DRB1, HLA-DQA2, HLA-DRA, PPBP, LINC00926, GNG11, HLA-DRB5, SPARC
GP9, AP001189.4, CA2, PTCRA, CD9, NRGN, RGS18, GZMB, CLU, TUBB1
Negative: VIM, IL7R, S100A6, IL32, S100A8, S100A4, GIMAP7, S100A10, S100A9, MAL
AQP3, CD2, CD14, FYB, LGALS2, GIMAP4, ANXA1, CD27, FCN1, RBP7
LYZ, S100A11, GIMAP5, MS4A6A, S100A12, FOLR3, TRABD2A, AIF1, IL8, IFI6
PC_ 5
Positive: GZMB, NKG7, S100A8, FGFBP2, GNLY, CCL4, CST7, PRF1, GZMA, SPON2
GZMH, S100A9, LGALS2, CCL3, CTSW, XCL2, CD14, CLIC3, S100A12, CCL5
RBP7, MS4A6A, GSTP1, FOLR3, IGFBP7, TYROBP, TTC38, AKR1C3, XCL1, HOPX
Negative: LTB, IL7R, CKB, VIM, MS4A7, AQP3, CYTIP, RP11-290F20.3, SIGLEC10, HMOX1
PTGES3, LILRB2, MAL, CD27, HN1, CD2, GDI2, ANXA5, CORO1B, TUBA1B
FAM110A, ATP1A1, TRADD, PPA1, CCDC109B, ABRACL, CTD-2006K23.1, WARS, VMO1, FYB
Seurat 提供幾種方法可以對PCA分析后的細胞和基因進行可視化:VizDimReduction, DimPlot, 和DimHeatmap。
> VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")
> DimPlot(pbmc, reduction = "pca")
下面的熱圖里,可以幫你簡單的探索一下dataset里異質性的來源,在你決定下游用哪些PC進行分析時會非常有用。細胞和基因根據它們的PCA值進行排序。用cells這個參數可以定義在排序里最高的和最低的一些細胞:
#只畫第一個主成分
> DimHeatmap(pbmc, dims = 1, cells = 500, balanced = TRUE)
也可以畫很多個PC:
> DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE)
決定“維數”
為了克服scRNA-seq數據中大量的技術噪聲,Seurat基于它們的PCA值對細胞進行聚類。那么怎么才能知道我們需要幾個主成分進行分析呢?
有兩種方法:
(1)用JackStrawPlot函數
它可以比較每個PC的p-值的分布,顯著的PC會有很低的p value,:
#這一步需要很長的時間
> pbmc <- JackStraw(pbmc, num.replicate = 100)
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04m 34s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
> pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
可視化:
> JackStrawPlot(pbmc, dims = 1:15)
(2)Elbow plot法
彎道圖主要是看畫出來的點在哪一個PC處“轉彎”:
> ElbowPlot(pbmc)
這里我們選擇了10,但是我們建議在用戶分析自己的數據時,選擇不同的PC數來重復下游分析(10,15,甚至50),這里也不要選擇過少的PC數,會顯著影響下游的分析結果。
細胞聚類
首先我們在PCA空間里根據歐氏距離構建一個KNN圖,并在任意兩個細胞間要確定它們的邊緣權重,這個過程用FindNeighbors函數,這里的input就是前面我們定義的dataset的維數。
接下來再用FindClusters函數,該函數有一個“分辨率”的參數,該參數設置下游聚類的“粒度”,值越高,得到的聚類數越多。這個參數設置在0.4-1.2之間,對于3千個左右的單細胞數據通常會得到比較好的結果。對于較大的數據集,最佳分辨率通常會增加。
> pbmc <- FindNeighbors(pbmc, dims = 1:10)
Computing nearest neighbor graph
Computing SNN
> pbmc <- FindClusters(pbmc, resolution = 0.5)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 2638
Number of edges: 96033
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8720
Number of communities: 9
Elapsed time: 0 seconds
#用Idents函數看一下前5個細胞的聚類情況
> head(Idents(pbmc), 5)
AAACATACAACCAC AAACATTGAGCTAC AAACATTGATCAGC AAACCGTGCTTCCG AAACCGTGTATGCG
1 3 1 2 6
Levels: 0 1 2 3 4 5 6 7 8
非線性降維
Seurat提供了幾種非線性的降維技術,如tSNE和UMAP。這些算法的目標是在低維空間中將相似的細胞放在一起。上面所確定的基于圖的集群中的單元應該在這些降維圖上共同定位。作為UMAP和tSNE的input,我們建議使用與聚類分析的輸入相同的PCs作為輸入。
> pbmc <- RunUMAP(pbmc, dims = 1:10)
15:28:31 UMAP embedding parameters a = 0.9922 b = 1.112
15:28:31 Read 2638 rows and found 10 numeric columns
15:28:31 Using Annoy for neighbor search, n_neighbors = 30
15:28:31 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
15:28:32 Writing NN index file to temp file /tmp/RtmpoZ1H8s/file30314c4df890
15:28:32 Searching Annoy index using 1 thread, search_k = 3000
15:28:33 Annoy recall = 100%
15:28:33 Commencing smooth kNN distance calibration using 1 thread
15:28:34 Initializing from normalized Laplacian + noise
15:28:34 Commencing optimization for 500 epochs, with 105386 positive edges
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
15:28:43 Optimization finished
> DimPlot(pbmc, reduction = "umap")
> saveRDS(pbmc, file = "../pbmc_tutorial.rds")
尋找差異表達基因
Seurat可以幫助你定義cluster的差異表達,默認情況下,它定義單個cluster的陽性和陰性的marker(與其他細胞群比較)。FindAllMarkers可以執行這個過程。
#在cluster1里尋找marker
#min.pct參數定義了一個基因在兩組細胞任意一組里的最低可檢測到的百分率
> cluster1.markers <- FindMarkers(pbmc, ident.1 = 1, min.pct = 0.25)
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s
> head(cluster1.markers, n = 5)
p_val avg_logFC pct.1 pct.2 p_val_adj
IL32 1.894810e-92 0.8373872 0.948 0.464 2.598542e-88
LTB 7.953303e-89 0.8921170 0.981 0.642 1.090716e-84
CD3D 1.655937e-70 0.6436286 0.919 0.431 2.270951e-66
IL7R 3.688893e-68 0.8147082 0.747 0.325 5.058947e-64
LDHB 2.292819e-67 0.6253110 0.950 0.613 3.144372e-63
#尋找cluster5與cluster0和3之間的差異marker
> cluster5.markers <- FindMarkers(pbmc, ident.1 = 5, ident.2 = c(0, 3), min.pct = 0.25)
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=10s
> head(cluster5.markers, n = 5)
p_val avg_logFC pct.1 pct.2 p_val_adj
FCGR3A 7.583625e-209 2.963144 0.975 0.037 1.040018e-204
IFITM3 2.500844e-199 2.698187 0.975 0.046 3.429657e-195
CFD 1.763722e-195 2.362381 0.938 0.037 2.418768e-191
CD68 4.612171e-192 2.087366 0.926 0.036 6.325132e-188
RP11-290F20.3 1.846215e-188 1.886288 0.840 0.016 2.531900e-184
你還可以尋找每一個cluster里與其他所有細胞相比之后的差異marker:
> pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
Calculating cluster 0
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s
Calculating cluster 1
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s
Calculating cluster 2
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=08s
Calculating cluster 3
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s
Calculating cluster 4
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s
Calculating cluster 5
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=11s
Calculating cluster 6
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=09s
Calculating cluster 7
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=09s
Calculating cluster 8
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=08s
> pbmc.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_logFC)
# A tibble: 18 x 7
# Groups: cluster [9]
p_val avg_logFC pct.1 pct.2 p_val_adj cluster gene
<dbl> <dbl> <dbl> <dbl> <dbl> <fct> <chr>
1 1.96e-107 0.730 0.901 0.594 2.69e-103 0 LDHB
2 1.61e- 82 0.922 0.436 0.11 2.20e- 78 0 CCR7
3 7.95e- 89 0.892 0.981 0.642 1.09e- 84 1 LTB
4 1.85e- 60 0.859 0.422 0.11 2.54e- 56 1 AQP3
5 0. 3.86 0.996 0.215 0. 2 S100A9
6 0. 3.80 0.975 0.121 0. 2 S100A8
7 0. 2.99 0.936 0.041 0. 3 CD79A
8 9.48e-271 2.49 0.622 0.022 1.30e-266 3 TCL1A
9 2.96e-189 2.12 0.985 0.24 4.06e-185 4 CCL5
10 2.57e-158 2.05 0.587 0.059 3.52e-154 4 GZMK
11 3.51e-184 2.30 0.975 0.134 4.82e-180 5 FCGR3A
12 2.03e-125 2.14 1 0.315 2.78e-121 5 LST1
13 7.95e-269 3.35 0.961 0.068 1.09e-264 6 GZMB
14 3.13e-191 3.69 0.961 0.131 4.30e-187 6 GNLY
15 1.48e-220 2.68 0.812 0.011 2.03e-216 7 FCER1A
16 1.67e- 21 1.99 1 0.513 2.28e- 17 7 HLA-DPB1
17 7.73e-200 5.02 1 0.01 1.06e-195 8 PF4
18 3.68e-110 5.94 1 0.024 5.05e-106 8 PPBP
Seurat有幾種方法可以檢測差異表達,用test.use參數來定義你使用的是哪一種,比如說ROC檢驗,ROC檢驗返回的是每一個marker的 ‘classification power(分類能力)’(值從0-1,1是最好的):
> cluster1.markers <- FindMarkers(pbmc, ident.1 = 0, logfc.threshold = 0.25, test.use = "roc", only.pos = TRUE)
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
> head(cluster1.markers, n = 5)
myAUC avg_diff power pct.1 pct.2
RPS12 0.822 0.5029988 0.644 1.000 0.991
RPS27 0.822 0.5020359 0.644 0.999 0.992
RPS6 0.820 0.4673635 0.640 1.000 0.995
RPL32 0.815 0.4242773 0.630 0.999 0.995
RPS14 0.807 0.4283480 0.614 1.000 0.994
我們還可以可視化這些marker。VlnPlot (展示在不同cluster里的表達可能分布),FeaturePlot(根據tSNE和PCA結果可視化基因表達)是最常用的可視化方法。你也可以用其他一些方法,例如:RidgePlot, CellScatter, DotPlot。
> VlnPlot(pbmc, features = c("MS4A1", "CD79A"))
你也可以展示原始的count值:
> VlnPlot(pbmc, features = c("NKG7", "PF4"), slot = "counts", log = TRUE)
> FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"))
我們還可以用DoHeatmap來畫細胞和基因的熱圖,在這里我們畫每一個cluster里的top20的marker。如果不夠20個,則畫所有的marker。
> top10 <- pbmc.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_logFC)
> DoHeatmap(pbmc, features = top10$gene) + NoLegend()
給每一個cluster標記名稱
很幸運的是,我們可以很清楚的知道每一個cluster的marker是什么,并可以為它們標記:
> new.cluster.ids <- c("Naive CD4 T", "Memory CD4 T", "CD14+ Mono", "B", "CD8 T", "FCGR3A+ Mono", "NK", "DC", "Platelet")
> names(new.cluster.ids) <- levels(pbmc)
> pbmc <- RenameIdents(pbmc, new.cluster.ids)
> DimPlot(pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()
> saveRDS(pbmc, file = "../output/pbmc3k_final.rds")