單細胞測序分析之Seurat(3.0)包學習筆記

上一篇文章深入學習了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)
在這圖里可以看出,顯著性從第10個PC到12個PC就開始急劇下降了

(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")
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

推薦閱讀更多精彩內容