Tutorial de análisis de datos de secuenciación del transcriptoma unicelular de Seurat (3) -python (scanpy)

Tutorial de análisis de datos de secuenciación del transcriptoma unicelular de Seurat (2) -python (scanpy)

El artículo hace referencia al sitio web oficial para obtener una explicación más detallada.

Este tutorial explora las posibilidades de visualización de scanpy y se divide en tres partes:

Diagrama de dispersión integrado (por ejemplo, UMAP, t-SNE)
Identificación de grupos utilizando genes marcadores conocidos
Visualización de genes expresados ​​diferencialmente
En este tutorial usaremos un conjunto de datos de 10x que contiene 68k células de PBMC. Scanpy incluye en su distribución una muestra reducida de este conjunto de datos, que contiene sólo 700 células y 765 genes altamente variables. Este conjunto de datos ha sido preprocesado y calculado UMAP.

En este tutorial también usaremos los siguientes marcadores de literatura:

Células B: CD79A, MS4A1
Plasma: IGJ (JCHAIN)
Células T: CD3D
NK: GNLY, NKG7
Mieloide: CST3, LYZ
Monocitos: FCGR3A
Dendrítico: FCER1A

Diagrama de dispersión integrado

import scanpy as sc
import pandas as pd
from matplotlib.pyplot import rc_context
sc.set_figure_params(dpi=100, color_map = 'viridis_r')
sc.settings.verbosity = 1
sc.logging.print_header()

Cargar conjunto de datos pbmc

pbmc = sc.datasets.pbmc68k_reduced()
# inspect pbmc contents
pbmc

Visualización de la expresión genética y otras variables.

Para los diagramas de dispersión, el valor que se va a representar se proporciona como color del argumento. Puede ser cualquier gen o cualquier columna en .obs donde .obs es un DataFrame que contiene anotaciones para cada observación/celda; consulte AnnData para obtener más información.

# rc_context is used for the figure size, in this case 4x4
with rc_context({'figure.figsize': (4, 4)}):
    sc.pl.umap(pbmc, color='CD79A')

Insertar descripción de la imagen aquí
Se pueden dar colores a varios valores. En el siguiente ejemplo, trazaremos 6 genes: 'CD79A', 'MS4A1', 'IGJ', CD3D', 'FCER1A' y 'FCGR3A' para comprender dónde se expresan estos genes marcadores.

Además, trazaremos otros dos valores: n_counts, que es el recuento de UMI para cada celda (almacenado en .obs), y Bulk_labels, que es un valor categórico que contiene las etiquetas sin procesar de las celdas de 10X.

El número de parcelas por fila está controlado por el parámetro ncols. Se puede usar el valor máximo vmax que se puede ajustar para el trazado (de manera similar, se puede usar vmin para el valor mínimo). En este caso, usamos p99, lo que significa usar el percentil 99 como valor máximo. Si vmax desea configurarse por separado para varios paquetes, el valor máximo puede ser un número o una lista de números.

Además, estamos usando frameon=False para eliminar el cuadro alrededor del gráfico y s=50 para establecer el tamaño en puntos.

with rc_context({'figure.figsize': (3, 3)}):
    sc.pl.umap(pbmc, color=['CD79A', 'MS4A1', 'IGJ', 'CD3D', 'FCER1A', 'FCGR3A', 'n_counts', 'bulk_labels'], s=50, frameon=False, ncols=4, vmax='p99')

Insertar descripción de la imagen aquí
En esta figura podemos ver el grupo de células que expresan el gen marcador y la coherencia con la etiqueta celular original.

La función de diagrama de dispersión tiene muchas opciones para ajustar la imagen. Por ejemplo, podemos ver los clústeres de la siguiente manera:

# compute clusters using the leiden method and store the results with the name `clusters`
sc.tl.leiden(pbmc, key_added='clusters', resolution=0.5)
with rc_context({'figure.figsize': (5, 5)}):
    sc.pl.umap(pbmc, color='clusters', add_outline=True, legend_loc='on data',
               legend_fontsize=12, legend_fontoutline=2,frameon=False,
               title='clustering of cells', palette='Set1')

Insertar descripción de la imagen aquí

Identificación de grupos basada en genes marcadores conocidos.

Normalmente, se requieren genes marcadores bien conocidos para etiquetar los grupos. Usando un diagrama de dispersión, podemos ver la expresión de un gen y potencialmente asociarlo con un grupo. Aquí demostramos métodos visuales adicionales para asociar genes marcadores con grupos utilizando gráficos de puntos, gráficos de violín, mapas de calor y lo que llamamos "gráficos de trayectoria". Todas estas visualizaciones resumen la misma información, expresada por clusters, y la elección del mejor resultado queda en manos del investigador.

Primero, construimos un diccionario con genes marcadores, ya que esto permitirá a Scanpy etiquetar automáticamente los genomas:

marker_genes_dict = {
    'B-cell': ['CD79A', 'MS4A1'],
    'Dendritic': ['FCER1A', 'CST3'],
    'Monocytes': ['FCGR3A'],
    'NK': ['GNLY', 'NKG7'],
    'Other': ['IGLL1'],
    'Plasma': ['IGJ'],
    'T-cell': ['CD3D'],
}

Gráfica de puntos

Una forma rápida de examinar la expresión de estos genes en cada grupo es utilizar un diagrama de puntos. Este tipo de gráfico resume dos tipos de información: el color representa la expresión promedio en cada categoría (en este caso, cada grupo) y el tamaño en puntos representa la proporción de células en la categoría que expresan el gen.

Además, es útil agregar un dendrograma al gráfico para agrupar grupos similares. La agrupación jerárquica se calcula automáticamente utilizando la correlación de componentes PCA entre grupos.

sc.pl.dotplot(pbmc, marker_genes_dict, 'clusters', dendrogram=True)

Insertar descripción de la imagen aquí
Usando este gráfico, podemos ver que el grupo 4 corresponde a células B, el grupo 2 corresponde a células T, etc. Esta información se puede utilizar para anotar celdas manualmente de la siguiente manera:

# create a dictionary to map cluster to annotation label
cluster2annotation = {
     '0': 'Monocytes',
     '1': 'Dendritic',
     '2': 'T-cell',
     '3': 'NK',
     '4': 'B-cell',
     '5': 'Dendritic',
     '6': 'Plasma',
     '7': 'Other',
     '8': 'Dendritic',
}

# add a new `.obs` column called `cell type` by mapping clusters to annotation using pandas `map` function
pbmc.obs['cell type'] = pbmc.obs['clusters'].map(cluster2annotation).astype('category')
sc.pl.dotplot(pbmc, marker_genes_dict, 'cell type', dendrogram=True)

Insertar descripción de la imagen aquí

sc.pl.umap(pbmc, color='cell type', legend_loc='on data',
           frameon=False, legend_fontsize=10, legend_fontoutline=2)

Insertar descripción de la imagen aquí

Diagrama de violín

Otra forma de explorar marcadores es utilizar argumentos de violín. Aquí podemos ver la expresión de CD79A en los grupos 5 y 8 y MS4A1 en el grupo 5. En comparación con los diagramas de puntos, los diagramas de violín nos dan una idea de la distribución de los valores de expresión genética entre las células.

with rc_context({'figure.figsize': (4.5, 3)}):
    sc.pl.violin(pbmc, ['CD79A', 'MS4A1'], groupby='clusters' )

Insertar descripción de la imagen aquí

with rc_context({'figure.figsize': (4.5, 3)}):
    sc.pl.violin(pbmc, ['n_genes', 'percent_mito'], groupby='clusters', stripplot=False, inner='box')  # use stripplot=False to remove the internal dots, inner='box' adds a boxplot inside violins

Insertar descripción de la imagen aquí

trama de violín apilado

Vea también el gráfico del violín sc.pl.stacked_violin para ver todos los genes marcadores que utilizamos. Como antes, se ha agregado un dendrograma para agrupar conglomerados similares.

ax = sc.pl.stacked_violin(pbmc, marker_genes_dict, groupby='clusters', swap_axes=False, dendrogram=True)

Insertar descripción de la imagen aquí

Diagrama matricial

Una forma sencilla de visualizar la expresión genética es utilizar Este es un mapa de calor de los valores de expresión promedio para cada gen agrupados por categoría. Este tipo de gráfico muestra básicamente la misma información que los colores en un gráfico de puntos. diagrama de matriz

Aquí, la expresión del gen se escala de 0 a 1, que es la expresión promedio máxima y 0 como la mínima.

sc.pl.matrixplot(pbmc, marker_genes_dict, 'clusters', dendrogram=True, cmap='Blues', standard_scale='var', colorbar_title='column scaled\nexpression')

Insertar descripción de la imagen aquí
Otra opción útil es usar sc.pp.scale, aquí almacenamos esta información debajo de la capa de escala. Después de eso, ajustamos los valores mínimo y máximo del gráfico y usamos un mapa de colores divergente (en este caso, RdBu_r significa_r es lo opuesto).

# scale and store results in layer
pbmc.layers['scaled'] = sc.pp.scale(pbmc, copy=True).X
sc.pl.matrixplot(pbmc, marker_genes_dict, 'clusters', dendrogram=True,
                 colorbar_title='mean z-score', layer='scaled', vmin=-2, vmax=2, cmap='RdBu_r')

Insertar descripción de la imagen aquí

mapa de calor

El mapa de calor no colapsa las celdas como en el gráfico anterior. En cambio, cada celda se muestra en una fila (o columna si swap_axes=True). Puede agregar información de grupo y mostrar sc.pl.umap usando el mismo código de color que se encuentra para cualquier otra incrustación.

ax = sc.pl.heatmap(pbmc, marker_genes_dict, groupby='clusters', cmap='viridis', dendrogram=True)

Insertar descripción de la imagen aquí

Los mapas de calor también se pueden trazar sobre datos escalados. En la siguiente imagen, similar al gráfico matricial anterior, se ajustan los valores mínimo y máximo y se utiliza un mapa de colores divergentes.

ax = sc.pl.heatmap(pbmc, marker_genes_dict, groupby='clusters', layer='scaled', vmin=-2, vmax=2, cmap='RdBu_r', dendrogram=True, swap_axes=True, figsize=(11,4))

Insertar descripción de la imagen aquí

Diagrama de trayectoria

Los gráficos de trayectoria muestran la misma información que los mapas de calor, pero la expresión genética se representa mediante la altura en lugar de una escala de colores.

ax = sc.pl.tracksplot(pbmc, marker_genes_dict, groupby='clusters', dendrogram=True)

Insertar descripción de la imagen aquí

Visualización de genes marcadores.

En lugar de caracterizar grupos mediante marcadores genéticos conocidos como se hacía anteriormente, podemos identificar genes que se expresan diferencialmente en grupos o grupos.

Para identificar genes expresados ​​diferencialmente ejecutamos sc.tl.rank_genes_groups. Esta función tomará cada grupo de células y comparará la distribución de cada gen en un grupo con la distribución en todas las demás células que no están en ese grupo. Aquí usaremos las etiquetas celulares originales dadas por 10x para identificar genes marcadores para estos tipos de células.

sc.tl.rank_genes_groups(pbmc, groupby='clusters', method='wilcoxon')

Visualización de genes marcadores mediante diagramas de puntos.

La visualización del diagrama de puntos ayuda a comprender el perfil de los genes que muestran expresión diferencial. Para hacer que la imagen resultante sea más compacta, usaremos n_genes=4 para mostrar solo los 4 genes con mayor puntuación.

sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=4)

Insertar descripción de la imagen aquí
Para obtener una mejor representación, podemos trazar el cambio logarítmico en lugar de la expresión genética. Además, queríamos centrarnos en genes con un cambio logarítmico >= 3 entre la expresión del tipo de célula y el resto de las células.

En este caso, configuramos value_to_plot='logfoldchanges' y min_logfoldchange=3.

Debido a que el cambio de pliegue logarítmico es una escala divergente, también ajustamos los valores mínimo y máximo que se trazarán y utilizamos un mapa de colores divergente. Tenga en cuenta que es difícil distinguir las poblaciones de células T en la imagen siguiente.

sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=4, values_to_plot='logfoldchanges', min_logfoldchange=3, vmax=7, vmin=-7, cmap='bwr')

centrarse en grupos específicos

A continuación, utilizamos un diagrama de puntos que se centra solo en dos grupos (la opción de grupo también está disponible para diagramas de violín, mapas de calor y diagramas de matriz). Aquí hemos configurado que en este caso se mostrarán todos los genes con n_genes=30 como máximo. min_logfoldchange=4

sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=30, values_to_plot='logfoldchanges', min_logfoldchange=4, vmax=7, vmin=-7, cmap='bwr', groups=['1', '5'])

Insertar descripción de la imagen aquí

Utilice un diagrama de matriz para visualizar genes marcadores.

Para la imagen a continuación, utilizamos el valor de "escala" calculado previamente (almacenado en la capa escalada) y utilizamos el mapa de colores de divergencia. \

sc.pl.rank_genes_groups_matrixplot(pbmc, n_genes=3, use_raw=False, vmin=-3, vmax=3, cmap='bwr', layer='scaled')

Insertar descripción de la imagen aquí

Visualización de genes marcadores mediante gráficos de violín apilados

sc.pl.rank_genes_groups_stacked_violin(pbmc, n_genes=3, cmap='viridis_r')

Insertar descripción de la imagen aquí

Visualización de genes marcadores mediante mapas de calor.

sc.pl.rank_genes_groups_heatmap(pbmc, n_genes=3, use_raw=False, swap_axes=True, vmin=-3, vmax=3, cmap='bwr', layer='scaled', figsize=(10,7), show=False);

Insertar descripción de la imagen aquí
Se muestran 10 genes por categoría, con las etiquetas genéticas desactivadas y los ejes intercambiados. Tenga en cuenta que al intercambiar imágenes, los códigos de color de las categorías aparecen en lugar de "corchetes".

sc.pl.rank_genes_groups_heatmap(pbmc, n_genes=10, use_raw=False, swap_axes=True, show_gene_labels=False,
                                vmin=-3, vmax=3, cmap='bwr')

Insertar descripción de la imagen aquí

Visualización de genes marcadores mediante gráficos de trayectoria.

sc.pl.rank_genes_groups_tracksplot(pbmc, n_genes=3)

Insertar descripción de la imagen aquí

Opciones de dendograma

La mayoría de las visualizaciones pueden utilizar un diagrama de árbol para organizar categorías. Sin embargo, el dendrograma también se puede dibujar de forma independiente de la siguiente manera:

# compute hierarchical clustering using PCs (several distance metrics and linkage methods are available).
sc.tl.dendrogram(pbmc, 'bulk_labels')
ax = sc.pl.dendrogram(pbmc, 'bulk_labels')

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/coffeeii/article/details/130837563
Recomendado
Clasificación