| name | bio-single-cell-markers-annotation |
| description | Find marker genes and annotate cell types in single-cell RNA-seq using Seurat (R) and Scanpy (Python). Use for differential expression between clusters, identifying cluster-specific markers, scoring gene sets, and assigning cell type labels. Use when finding marker genes and annotating clusters. |
| tool_type | mixed |
| primary_tool | Seurat |
Marker Genes and Cell Type Annotation
Find differentially expressed genes between clusters and annotate cell types.
Scanpy (Python)
Required Imports
import scanpy as sc
import pandas as pd
Find Markers for All Clusters
sc.tl.rank_genes_groups(adata, groupby='leiden', method='wilcoxon')
sc.pl.rank_genes_groups(adata, n_genes=10, sharey=False)
markers = sc.get.rank_genes_groups_df(adata, group=None)
print(markers.head(20))
Marker Detection Methods
sc.tl.rank_genes_groups(adata, groupby='leiden', method='wilcoxon')
sc.tl.rank_genes_groups(adata, groupby='leiden', method='t-test')
sc.tl.rank_genes_groups(adata, groupby='leiden', method='logreg')
Filter Markers
markers = sc.get.rank_genes_groups_df(adata, group='0')
significant = markers[(markers['pvals_adj'] < 0.05) & (markers['logfoldchanges'] > 1)]
print(f'Cluster 0 significant markers: {len(significant)}')
sc.tl.filter_rank_genes_groups(adata, min_fold_change=1.5, min_in_group_fraction=0.25)
Compare Specific Clusters
sc.tl.rank_genes_groups(adata, groupby='leiden', groups=['0'], reference='1', method='wilcoxon')
sc.pl.rank_genes_groups(adata, n_genes=10)
Visualize Marker Expression
markers_to_plot = ['CD3D', 'CD8A', 'MS4A1', 'CD14', 'FCGR3A', 'NKG7']
sc.pl.dotplot(adata, var_names=markers_to_plot, groupby='leiden')
sc.pl.stacked_violin(adata, var_names=markers_to_plot, groupby='leiden')
sc.pl.rank_genes_groups_heatmap(adata, n_genes=5, groupby='leiden')
sc.pl.matrixplot(adata, var_names=markers_to_plot, groupby='leiden')
Gene Set Scoring
t_cell_genes = ['CD3D', 'CD3E', 'CD4', 'CD8A', 'CD8B']
sc.tl.score_genes(adata, gene_list=t_cell_genes, score_name='T_cell_score')
sc.pl.umap(adata, color='T_cell_score')
Cell Cycle Scoring
s_genes = ['MCM5', 'PCNA', 'TYMS', 'FEN1', 'MCM2']
g2m_genes = ['HMGB2', 'CDK1', 'NUSAP1', 'UBE2C', 'BIRC5']
sc.tl.score_genes_cell_cycle(adata, s_genes=s_genes, g2m_genes=g2m_genes)
sc.pl.umap(adata, color=['S_score', 'G2M_score', 'phase'])
Manual Cell Type Annotation
cluster_annotations = {
'0': 'CD4 T cells',
'1': 'CD14 Monocytes',
'2': 'B cells',
'3': 'CD8 T cells',
'4': 'NK cells',
'5': 'FCGR3A Monocytes'
}
adata.obs['cell_type'] = adata.obs['leiden'].map(cluster_annotations)
sc.pl.umap(adata, color='cell_type')
Export Markers
markers = sc.get.rank_genes_groups_df(adata, group=None)
markers.to_csv('all_markers.csv', index=False)
top_markers = markers.groupby('group').head(20)
top_markers.to_csv('top_markers.csv', index=False)
Seurat (R)
Required Libraries
library(Seurat)
library(dplyr)
Find All Markers
all_markers <- FindAllMarkers(seurat_obj, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
top_markers <- all_markers %>%
group_by(cluster) %>%
slice_max(n = 5, order_by = avg_log2FC)
print(top_markers)
Find Markers for Specific Cluster
cluster0_markers <- FindMarkers(seurat_obj, ident.1 = 0, min.pct = 0.25)
head(cluster0_markers)
Compare Two Clusters
markers_0_vs_1 <- FindMarkers(seurat_obj, ident.1 = 0, ident.2 = 1, min.pct = 0.25)
head(markers_0_vs_1)
Marker Detection Methods
markers <- FindMarkers(seurat_obj, ident.1 = 0, test.use = 'wilcox')
markers <- FindMarkers(seurat_obj, ident.1 = 0, test.use = 'MAST')
markers <- FindMarkers(seurat_obj, ident.1 = 0, test.use = 'DESeq2')
markers <- FindMarkers(seurat_obj, ident.1 = 0, test.use = 'LR')
Visualize Markers
FeaturePlot(seurat_obj, features = c('CD3D', 'MS4A1', 'CD14', 'NKG7'))
VlnPlot(seurat_obj, features = c('CD3D', 'MS4A1', 'CD14'))
markers_to_plot <- c('CD3D', 'CD8A', 'MS4A1', 'CD14', 'FCGR3A', 'NKG7')
DotPlot(seurat_obj, features = markers_to_plot) + RotatedAxis()
top10 <- all_markers %>%
group_by(cluster) %>%
top_nn wt avg_log2FC
DoHeatmapseurat_obj features top10gene
Gene Module Scoring
t_cell_genes <- list(c('CD3D', 'CD3E', 'CD4', 'CD8A', 'CD8B'))
seurat_obj <- AddModuleScore(seurat_obj, features = t_cell_genes, name = 'T_cell_score')
FeaturePlot(seurat_obj, features = 'T_cell_score1')
Cell Cycle Scoring
s.genes <- cc.genes$s.genes
g2m.genes <- cc.genes$g2m.genes
seurat_obj <- CellCycleScoring(seurat_obj, s.features = s.genes, g2m.features = g2m.genes)
DimPlot(seurat_obj, group.by = 'Phase')
Manual Cell Type Annotation
new_cluster_ids <- c(
'0' = 'CD4 T cells',
'1' = 'CD14 Monocytes',
'2' = 'B cells',
'3' = 'CD8 T cells',
'4' = 'NK cells',
'5' = 'FCGR3A Monocytes'
)
seurat_obj <- RenameIdents(seurat_obj, new_cluster_ids)
DimPlot(seurat_obj, reduction = 'umap', label = TRUE)
seurat_obj$cell_type <- Idents(seurat_obj)
Export Markers
write.csv(all_markers, file = 'all_markers.csv', row.names = FALSE)
write.csv(top_markers, file = 'top_markers.csv', row.names = FALSE)
Common PBMC Markers
| Cell Type | Markers |
|---|
| CD4 T cells | CD3D, CD4, IL7R |
| CD8 T cells | CD3D, CD8A, CD8B |
| B cells | MS4A1, CD79A, CD19 |
| NK cells | NKG7, GNLY, NCAM1 |
| CD14 Monocytes | CD14, LYZ, S100A8 |
| FCGR3A Monocytes | FCGR3A, MS4A7 |
| Dendritic cells | FCER1A, CST3 |
| Platelets | PPBP, PF4 |
Method Comparison
| Task | Scanpy | Seurat |
|---|
| All markers | rank_genes_groups() | FindAllMarkers() |
| Specific cluster | rank_genes_groups(groups=['0']) | FindMarkers(ident.1=0) |
| Two clusters | rank_genes_groups(reference='1') | FindMarkers(ident.1=0, ident.2=1) |
| Gene scoring | score_genes() | AddModuleScore() |
| Dot plot | sc.pl.dotplot() | DotPlot() |
Related Skills
- clustering - Must cluster before finding markers
- preprocessing - Data must be normalized
- data-io - Export annotated data