Brain Single Nuclei - Methods

The Single Nuclei Brain Section incorporates data generated externally by Siletti K et al. (2023), comprising more than 3 million nuclei. Here, we integrate 2.6 million nuclei reorganized into 11 major brain regions and partitioned into neuronal and non-neuronal cell subsets. The data presented here underwent reprocessing and re-annotation procedures, resulting in 48 single-nucleus brain cell types, as described in detail below.

What can you learn from the Single Nuclei Brain section?

Learn about:

  • mRNA and protein expression across brain cell types
  • if a gene is enriched in a particular brain cell cluster (specificity)
  • how the brain specific variation translates when comparing to the whole body cell types

Source publication

Siletti K et al. (2023) “Transcriptomic diversity of cell types across the adult human brain” Science . 2023 Oct 13;382(6667)

Includes single nuclei RNA sequencing result, based on over 3 million cells from multiple brain regions, and the data is available in the CellxGene browsing tool (The Human Brain Cell Atlas v1.0) for exploring individual clusters and samples.

Data Overview

The entire filtered snRNA-seq dataset (~3 million nuclei) was downloaded from the CellxGene browsing tool (The Human Brain Cell Atlas v1.0). We dissected the data into 11 main brain regions, and partitioned the nuclei of each region into neuronal and non-neuronal data subsets. We performed a minor cell-filtering step, followed by cell-clustering and annotation procedure resulting in 832 cell clusters, 48 brain cell types (of which 34 are neuronal), aggregated into 19 cell type groups.

Data type Count Description Cover (nr genes)
RNA expression 11 RNA read count for genes per cell across 11 brain regions 19580
RNA expression 832 RNA expression for genes across 832 clusters 19580
RNA expression 48 RNA expression for genes across 48 cell types 19580
RNA expression 19 RNA expression for genes across 19 cell type groups 19580
RNA expression 34 RNA expression for genes across 34 neuronal cell types 19580

More information about the regionally split data and the resulting clusters, cell types, and cell type groups can be found here.

Nuclei Filtering

Although the accessed data was already filtered and quality controlled, we additionally filtered out any droplets with over 1% of hemoglobin-related genes counts (defined by GO:0005833) or over 10% of mitochondrial genes (defined as genes originating from the mitochondrial chromosome).

Dimensionality Reduction and Cell Clustering

Data was processed using python (v3.11.7) and scanpy (v1.11.1). For each data subset, non-coding RNA MALAT1, mitochondrial genes and any gene detected in less than three nuclei were excluded from the feature set. The counts were then normalized using scanpy’s normalize_total function under standard settings, followed by a loge(X+1) transformation. Highly variable genes were selected using scanpy’s highly_variable_genes function, and based on these genes, a principal component analysis (PCA) was computed. A k-nearest neighbors graph (k = 15) was calculated based on the first 40 principal components, which was subsequently used to compute the UMAP and Leiden clusters.

To obtain high resolution cell type discrimination, while avoiding unnecessary cell cluster count inflation, we adopted a compound clustering strategy.

  • Standard-resolution: We set leiden resolution to 1 under standard settings.
  • High-resolution subclustering: Initially a low resolution leiden subclustering was executed (at resolution 0.01). The resulting broad clusters were then isolated and independently re-clustered, (that meant computing new highly variable genes, PCA and nearest neighberhood graph).

Downsampling the Cerebral Cortex Neuronal Dataset

Following clustering, the cerebral cortex neuronal dataset was downsampled to close to 500,000 cells. To preserve low-abundance populations, downsampling was applied at the cluster level rather than globally: standard-resolution clusters containing more than 13,800 cells were randomly downsampled to a maximum cap of 13,800 cells, while clusters below this threshold were retained in their entirety.

Cell Type Annotation and Hierarchical Organisation

Cell types were manually annotated using established canonical marker genes and neuronal neuropeptide expression profiles. The annotation was done primarily on the standard-resolution leiden clusters. High-resolution subclusters were selected when they resolved closely related cell populations that were not separated under the standard resolution, particularly within non-neuronal lineages (e.g., distinguishing pericytes from vascular smooth muscle cells, or microglia from perivascular macrophages). In cases where subclustering clarified distinct cell types, the resulting sub-annotations superseded the standard-resolution labels. Subclusters assigned identical annotations were merged into a single final cluster.

Combining the standard and subclustering annotations across neuronal and non-neuronal datasets yielded 832 cell clusters.

Each cluster was assigned to one of 48 cell types, as well as a detailed cluster annotation (which can be observed at the right side of each UMAP depiction) for maximum annotation granularity. Each cell type was asigned to one of 19 cell type groups. The Cell Type Group expression profile is derived from the Cell Type data by means of max pooling aggregation. More precisely, for every gene within a cell type group, the maximum nCPM value observed across the constituent cell types is retained.

Figure 1. Hierarchical order of the resulting cell type annotation across the brain single nuclei dataset. Each of the 48 cell types (outer circle) is assigned into one of 19 cell type groups (middle circle) and organized into broader cell type classes (inner circle).

Data Normalisation

For downstream analyses, single nuclei counts were aggregated into pseudobulk profiles: raw counts per gene were averaged across all cells within a cluster, generating 832 pseudobulk-profiles. We filtered the data for protein-coding genes only (n= 20162), which were then further scaled to counts per million (CPM), resulting in what we designate as protein counts per million (pCPM). The pCPM values were then TMM normalized (Trimmed means of M values) by applying the TMM implemented in NOISeq (v2.46.0), specifying refColumn = "median", logratioTrim = 0.3, sumTrim = 0.3, and doWeighting = FALSE. Clusters containing 10 cells or less were excluded previous to TMM normalization factor estimation and were assigned a factor of 1.

Data Integration

To obtain a single expression value per cell type, we followed a within-dataset aggregation, followed by a cross-dataset aggregation:

  1. Within-Dataset aggregation: We computed the weighted mean of nCPM counts for clusters assigned to the same cell type within a single dataset, using the number of cells within each cluster as the weighting factor. More formally, x^j represents the aggregated vector of nCPM values for a cell type within a dataset. Here, xj is the nCPM vector for cluster j; n is the total number of clusters being aggregated; and wj is the cell count used as the weighting factor for cluster j.

    x ^ j = ∑ j = 1 n w j x j ∑ j = 1 n w j
  2. Cross-dataset aggregation: The same cell types in different datasets were averaged across datasets to obtain a final transcript profile per cell type.

Excluded from the cross-dataset aggregation and subsequent gene classification were clusters with mixed cell types, clusters with low cell type annotation confidence or assigned as "unassigned" , and cell types within a tissue that comprised less than 10 cells. You can find here more detailed information as to which specific clusters were excluded from the aggregation.

Specificity Annotation

Gene expression specificity was assessed at two levels. First, broadly across all 19 cell type groups, where neuronal populations organized into five main groups. Second, at a more detailed level, across 34 neuronal cell types, allowing further investigation of neuronal diversity. For each level, every gene is asssigned a gene specificity category and a Tau score.

Gene Specificity Classification

Category Description
Cell type enriched nCPM in a particular cell type/cell type group at least four times any other cell type/cell type group
Group enriched Mean nCPM across a group (of 2-5 cell types, 2-5 cell type groups) is at least fourfold higher than in any other cell type/cell type group
Cell type Enhanced nCPM in one or several cell types/cell type groups is at least fourfold higher than the global mean nCPM across all tissues, provided the lowest expressing enhaced tissue is at least twofold higher than the average of the next three cell types/cell type groups (gap ratio ≥ 2)
Low cell type specificity nCPM ≥ 1 in at least one cell type/cell type group but not elevated in any cell type/cell type group
Not detected nCPM < 1 in all cell types/cell type groups


Tau Score

A tau (τ) specificity score was calculated for each protein-coding gene following the formula proposed by Yanai et al. Formally, its calculation is presented below. The calculation uses the loge(nCPM+1) transformed expression levels, where n represents the total number of cell types or cell type groups, xi represents the loge(nCPM+1) expression level in cell type i, and x^i represents the expression in cell type i normalized by the maximum expression across all n cell types.

τ = ∑ i = 1 n 1 - x ^ i n - 1 ; x ^ i = x i max 1 ≤ j ≤ n x j


What is presented in the section?

The data is presented as interactive UMAP plots and summarizing bar plots, displaying the expression of each gene in each cluster or single nuclei, including information on cluster type specificity from a whole brain perspective.


RBFOX3 - snbrain

VIP - snbrain

GFAP - snbrain

SELE - snbrain

For every protein-coding gene there is a summarized barplot showing the expression profile acorss the 34 different cluster names. Here, are 4 examples, two neuronal specific markers (RBFOX3, also called NeuN being pan-neuronal, while VIP is selectively expressed by a neuronal subtype and mainly found in one cluster), the astrocyte marker GFAP and endothelial specific SELE. Below, is the cerebral cortex UMAP for these examples shown:


RBFOX3 - cerebral cortex, neurons

VIP - cerebral cortex, neurons

GFAP - cerebral cortex, non-neuronal

SELE - cerebral cortex, non-neuronal


RBFOX3 - cerebral cortex, neurons

VIP - cerebral cortex, neurons

GFAP - cerebral cortex, non-neuronal

SELE - cerebral cortex, non-neuronal