Scientific FigureScientific Figure
Generador de volcano plots

Generador de volcano plots

Un generador de volcano plots para resultados de RNA-seq, proteómica y metabolómica en artículos y tesis: genes sobreexpresados e infraexpresados separados en tus umbrales, los principales resultados etiquetados y los recuentos en la leyenda, todo calculado a partir de tu tabla.

Estilos de revista en el generador de volcano plots

Cinco acabados de revista del generador de volcano plots, cada uno con una tabla de resultados ilustrativa distinta: hígado de ratón knockout, marcadores de célula única, estrés por sequía en plantas, un microarray de fumadores y un cribado de fosfoproteómica. Haz clic en una tarjeta para cargar su instrucción y sus genes.

Nature

El acabado Nature del generador de volcano plots: rojo ladrillo apagado y azul acero, nombres de genes en cursiva, sin recuadro.

Cell Press

Los marcadores de Seurat en el generador de volcano plots superan y = 80, y el eje y se escala para que quepan.

PLOS

Bermellón y azul cielo aptos para daltónicos con etiquetas en recuadro: el acabado PLOS del generador de volcano plots.

Bioinformatics

Una tabla de limma en el generador de volcano plots, con un estilo que sigue siendo legible impreso en escala de grises.

Preprint (ggplot2)

Fosfositios como etiquetas y una línea en p < 0.01, con el aspecto ggplot2 del generador de volcano plots.

Ejemplos de volcano plots

Cuatro ejemplos de volcano plots del generador de volcano plots (RNA-seq, proteómica, metabolómica y un conjunto de genes etiquetado), cada uno un render real de la instrucción y la tabla de su tarjeta. Haz clic en una tarjeta para pasar su instrucción y sus genes al editor.

RNA-seq: Fármaco vs Vehículo

Lo que hace por defecto el generador de volcano plots: diez etiquetas, los resultados más significativos de ambos lados.

Proteómica: Hipoxia vs Normoxia

Proteómica label-free en el generador de volcano plots, con cocientes log₂ y valores p de la prueba t.

Metabolómica con fold change simple

Fold changes simples de una hoja de metabolómica; el generador de volcano plots representa su log₂.

Resaltar seis genes con nombre

Nombra los genes y el generador de volcano plots etiqueta exactamente esos, estén en gris o no.

¿Qué es un volcano plot?

Un volcano plot (gráfico de volcán) muestra un resultado de expresión diferencial en una sola imagen: cada gen es un punto, con su log₂ fold change entre dos condiciones en el eje x y el −log₁₀ de su valor p en el eje y. Los genes que cambiaron mucho y de forma fiable suben hacia las dos esquinas superiores, mientras que los genes sin cambios forman la base baja y ancha en torno a cero, la forma que da nombre al gráfico. Las líneas discontinuas de umbral para el fold change y la significación separan los puntos en sobreexpresados, infraexpresados y no significativos.

Sobre este generador de volcano plots

  • El generador de volcano plots calcula en código, a partir de tu tabla, el −log₁₀ p, la clase de cada gen, los recuentos, los dos ejes y las líneas de umbral, y entrega cada coordenada al modelo de imagen. El modelo solo los coloca.
  • Los umbrales por defecto del generador de volcano plots son |log₂ fold change| ≥ 1 (un cambio de 2 veces) y p < 0.05, leído como ajustado cuando tus valores son padj, FDR o valores q. Cámbialos en la instrucción: «|log2FC| > 0.58 y padj < 0.01».
  • Los fold changes simples se convierten: cuando una petición dice fold change y nunca log (lactato 3.2), el generador de volcano plots representa log₂ 3.2 = 1.68. En un archivo decide el encabezado de la columna.
  • Hasta 200 genes, el generador de volcano plots coloca cada punto exactamente. Por encima, los genes más significativos se colocan exactamente y la base gris se dibuja a partir de su recuento y su forma reales, así que una tabla de 20 000 genes conserva sus recuentos reales.

Cómo leer un volcano plot, punto por punto

Veinte genes ilustrativos de una comparación de RNA-seq de interferón beta frente a tratamiento simulado, dibujados con el mismo código que ejecuta el generador de volcano plots, con |log₂FC| ≥ 1 y padj < 0.05. Los números de la figura coinciden con los pasos.

Volcano plot de 20 genes ilustrativos, interferón beta frente a simulado: seis genes sobreexpresados arriba a la derecha encabezados por IFIT1, cuatro genes infraexpresados arriba a la izquierda encabezados por COL1A1, STAT1 alto pero dentro de las líneas de fold change, CXCL10 muy a la derecha pero bajo la línea de significación, y genes grises sin cambios en la base−6−4−20246051015log₂ fold change (Interferón beta / Simulado)−log₁₀(valor p ajustado)CXCL10STAT1COL1A1TGFBIIFIT1ISG15RSAD21233456
La tabla del recorrido tal como la coloca el generador de volcano plots: líneas discontinuas en log₂ fold change ±1 y en −log₁₀ 0.05 = 1.3, resultados en color, el resto en gris.
  1. 1

    En horizontal: dirección y tamaño del cambio

    x es el log₂ fold change del interferón beta respecto al simulado. 0 es sin cambio, +1 es el doble, −1 es la mitad, e IFIT1 en +5.1 es unas 34 veces mayor. La escala es simétrica, así que una reducción a la mitad queda tan a la izquierda como una duplicación a la derecha.

  2. 2

    En vertical: evidencia, no tamaño

    y es el −log₁₀ del p ajustado. La línea discontinua en 1.3 es padj 0.05, 2 es 0.01, e IFIT1 en 13.7 es padj 2 × 10⁻¹⁴. Más alto significa que es menos probable que el cambio sea ruido; no dice nada de lo grande que es el cambio.

  3. 3

    Las esquinas superiores tienen los resultados

    A la derecha de x = 1 y por encima de la línea están los seis genes sobreexpresados (IFIT1, ISG15, MX1, RSAD2, OAS1, IRF7); a la izquierda de −1, los cuatro infraexpresados (COL1A1, TGFBI, MYC, CCND1). Estos son los recuentos que publica un artículo.

  4. 4

    Alto en el centro: significativo pero pequeño

    STAT1 está en (0.7, 8.5): su cambio se mide con mucha precisión pero es solo de 1.6 veces, bajo la línea de 2 veces, así que se queda en gris. FN1 hace lo mismo más abajo, en el lado infraexpresado.

  5. 5

    Muy lejos pero bajo: grande pero incierto

    CXCL10 está en (3.9, 0.9): de media 15 veces mayor, pero su padj es 0.12. Pocas lecturas o réplicas que no coinciden dan exactamente este punto. Con estos umbrales no es un resultado, pero merece una segunda mirada.

  6. 6

    La base gris: lo que no cambió

    ACTB, GAPDH y los demás genes de mantenimiento se agolpan en torno a (0, 0). En un volcano plot de RNA-seq de todo el genoma esta base contiene la mayoría de los 15 000 a 25 000 genes analizados.

Envía estos 20 genes al generador de volcano plots, cambia luego un umbral en la instrucción y mira cómo los puntos cruzan las líneas.

Cómo usar el generador de volcano plots

1

Dale tus genes al generador de volcano plots

Escribe un gen por fila como nombre, log₂ fold change, p (FKBP5 3.1, 1.2e-12; CCL2 −2.2, 5e-7) o adjunta la tabla de resultados en .csv, .tsv o .xlsx. Se reconocen los encabezados de DESeq2, edgeR, limma, Seurat y Perseus, hasta 60 000 filas.

2

Indica la comparación y los umbrales

Escribe Tratado vs Control para el título del eje, y los umbrales si no son |log₂FC| ≥ 1 y p < 0.05 (di padj o FDR para valores ajustados). Nombra los genes que quieres etiquetar o pide los N primeros; por defecto son los diez resultados más significativos, repartidos entre los dos lados.

3

Elige un estilo de revista y genera

Nature, Cell Press, PLOS, Bioinformatics o un acabado preprint tipo ggplot2. El generador de volcano plots calcula coordenadas, clases, recuentos y líneas de umbral antes de que dibuje el modelo de imagen, y los recalcula en cada edición posterior.

Qué columnas de DESeq2, edgeR, limma y Seurat van en un volcano plot

Cada pipeline escribe los mismos tres números con nombres distintos. Estas son las columnas que el generador de volcano plots lee de cada tabla de resultados, así que el archivo puede adjuntarse exactamente como se exportó.

Tabla de resultadosx: log₂ fold changey: valor pp ajustado (se usa primero)Ojo con
DESeq2 results()log2FoldChangepvaluepadjpadj es NA para los genes eliminados por el filtrado independiente; esas filas se omiten. Para representar y ordenar, los autores de DESeq2 recomiendan los fold changes contraídos de lfcShrink().
edgeR topTags()logFCPValueFDREl FDR es de Benjamini–Hochberg por defecto. logCPM es la expresión media, no un fold change.
limma topTable()logFCP.Valueadj.P.ValB es el log-odds de expresión diferencial, no un valor p; déjalo fuera del eje y.
Seurat FindMarkers()avg_log2FCp_valp_val_adjp_val_adj está corregido por Bonferroni sobre todos los genes y a menudo es exactamente 0; esos genes se dibujan en el menor valor distinto de cero. Seurat v3 escribía avg_logFC en logaritmo natural.
Perseus (MaxQuant)Difference−Log p-value (ya en −log₁₀)q-valueLa columna −log₁₀ se reconvierte a p, para no aplicarla dos veces.
Tu propia hojalog2FCp o pvaluepadj, FDR o qUna columna titulada Fold change, sin log, se convierte a log₂: 4 pasa a 2 y 0.25 pasa a −2.

Cuando un archivo tiene una columna de p sin ajustar y otra ajustada, el generador de volcano plots representa y aplica el umbral a la ajustada, que es con la que suelen publicarse los resultados de DESeq2, edgeR y limma. Para representar el p sin ajustar, adjunta la hoja sin la columna ajustada.

Umbrales del volcano plot: qué cambian |log₂FC| y padj

Los dos umbrales deciden qué puntos cuentan como resultados, y son decisiones, no hechos de los datos. |log₂ fold change| ≥ 1 exige al menos una duplicación o una reducción a la mitad; padj < 0.05 acepta un 5 % esperado de falsos descubrimientos entre los genes seleccionados. Los mismos 20 genes del recorrido, con cuatro pares de umbrales, contados por el propio código del generador de volcano plots:

UmbralesArribaAbajoNo significativosQué cambió
|log₂FC| ≥ 1, padj < 0.05 (lo habitual por defecto)6410STAT1 y FN1 pasan por p pero no por fold change, CXCL10 por fold change pero no por p, así que los tres siguen en gris.
|log₂FC| ≥ 0.58 (1.5 veces), padj < 0.05758Un umbral de 1.5 veces deja entrar a STAT1 y FN1: cambios pequeños medidos con mucha precisión.
|log₂FC| ≥ 1, padj < 0.016311El p más estricto deja fuera a CCND1 (padj 0.019). Todos los genes sobreexpresados están ya por debajo de 0.001, así que ese lado se mantiene.
|log₂FC| ≥ 2 (4 veces), padj < 0.0015114Solo queda la respuesta al interferón más fuerte, sin IRF7, y un gen infraexpresado, TGFBI.

Dos despistes que evitar. Aplicar el umbral sobre padj pero representar el p sin ajustar en el eje y pone la línea horizontal donde no se aplicó ningún umbral, así que pueden quedar puntos grises por encima. Y un umbral copiado como 10e-6 de un script de R es 10 × 10⁻⁶ = 1e-5 en R, no 1e-6. Dile al generador de volcano plots qué p representas y la línea cae exactamente en ese valor.

Qué dibuja el generador de volcano plots: RNA-seq, proteómica, célula única y más

Siete volcano plots que aparecen en artículos y tesis, qué distingue a cada uno y qué decirle al generador de volcano plots para obtenerlo.

Volcano plot de RNA-seq (DESeq2, edgeR, limma-voom)

El volcano plot más común: un punto por gen de entre 15 000 y 25 000 genes analizados, con el p ajustado (padj o FDR) en el eje y. Los fold changes contraídos de lfcShrink() de DESeq2 evitan que los genes con pocas lecturas salgan disparados a ±8. Adjunta el archivo de resultados tal como se exportó; a partir de 200 genes el generador de volcano plots coloca exactamente los significativos y dibuja la base gris a partir de sus recuentos.

Volcano plot de proteómica

El cociente log₂ de intensidades de proteínas (label-free LFQ o TMT) frente al −log₁₀ p de una prueba t o de limma, normalmente para 2000 a 6000 proteínas. Etiqueta por nombre de gen en lugar de por accesión de UniProt. Perseus suele dibujar una línea de significación curva (FDR con una constante s0); el generador de volcano plots dibuja umbrales rectos, así que indica el |log₂FC| y el p que aplicaste.

Volcano plot de metabolómica y lipidómica

Los fold changes suelen darse como cocientes simples (tumor/normal = 3.2), con p de prueba t o de Wilcoxon y un FDR. Escribe fold change sin log y el generador de volcano plots convierte los valores: 3.2 se representa en 1.68 y 0.5 en −1. Lo típico son unos cientos de variables, así que cada punto se coloca exactamente.

Volcano plot de marcadores de célula única (Seurat FindMarkers)

Un clúster frente a todas las demás células, avg_log2FC en x y p_val_adj en y. Con miles de células por prueba, los valores p llegan a 10⁻⁸⁰ y menos, así que el eje y sube mucho más que en RNA-seq bulk, y muchos genes tienen p_val_adj = 0, que el generador de volcano plots dibuja en el menor valor almacenado.

Volcano plot de microarray (limma)

logFC y adj.P.Val de limma a partir de intensidades log₂, a menudo para conjuntos de sondas en lugar de genes. Los fold changes están comprimidos respecto a RNA-seq, así que es habitual un umbral de 1.5 veces (|log₂FC| ≥ 0.58). El generador de volcano plots toma la columna Symbol para las etiquetas, y el ID de sonda donde el símbolo está vacío.

Volcano plot etiquetado con genes resaltados

Un volcano plot que nombra un conjunto elegido, como la ruta de la que trata el artículo, en lugar de los primeros resultados. Escribe «resalta solo NANOG, SOX2 y MYC» y el generador de volcano plots etiqueta exactamente esos, aunque estén en gris, que a menudo es justo lo que quiere mostrar la figura.

Volcano plots de fosfoproteómica y de cribados CRISPR

Los mismos ejes para otras unidades: fosfositios (EGFR_Y1068) en fosfoproteómica, o genes de un cribado MAGeCK con el log₂ fold change de los recuentos de sus guías. Las etiquetas pueden ser nombres de sitios; dile al generador de volcano plots qué es cada punto y los títulos de los ejes lo indicarán.

Volcano plot frente a MA plot

Un volcano plot enfrenta el fold change a la significación; un MA plot enfrenta el fold change a la expresión media. Los dos salen de la misma tabla de resultados. El volcano plot responde qué genes cambiaron de forma fiable; el MA plot, si los fold changes dependen de lo mucho que se expresa un gen.

Volcano plot

MA plot

AspectoVolcano plotMA plot
Eje xlog₂ fold changeexpresión media en escala logarítmica (A: baseMean en DESeq2, logCPM en edgeR, AveExpr en limma)
Eje y−log₁₀ p o p ajustadolog₂ fold change (M)
Formauna V que sube desde una base ancha en x = 0una banda plana en torno a M = 0 que se abre en abanico a baja expresión
Qué respondequé genes cambiaron mucho y de forma fiablesi los genes con pocas lecturas inflan los fold changes, y si la normalización centró M en 0
Dónde vala figura de resultados, con los resultados etiquetadoscontrol de calidad y figuras suplementarias

El generador de volcano plots dibuja volcano plots. Para mostrar los mismos resultados en todas las muestras, usa el generador de mapas de calor con su expresión normalizada.

Generador de volcano plots frente a R, Prism, Python y Excel

La mayoría de los volcano plots se dibujan en R a partir de una tabla de DESeq2 o limma, en GraphPad Prism tras múltiples pruebas t, o en Python. Dónde deja el trabajo cada uno:

AspectoGenerador de volcano plotsR (ggplot2, EnhancedVolcano)GraphPad PrismPython (matplotlib)Excel
Punto de partidaFilas escritas, o la tabla de DESeq2, edgeR, limma o Seurat tal como se exportóUn data frame de resultados y un scriptUn análisis de múltiples pruebas t, o una tabla XY de fold change y −log₁₀ pUn DataFrame de pandas y un scriptColumnas de fold change y p, más una columna auxiliar =-LOG10(C2)
−log₁₀ pCalculado a partir de la tabla-log10(padj) en aes(); EnhancedVolcano lo hace por tiCalculado por el análisis de pruebas t-np.log10(df.padj)Tu fórmula
Líneas de umbral y coloresA partir de los umbrales que indiques (por defecto 1 y 0.05), con las clases contadasgeom_vline, geom_hline y una columna de clase; pCutoff y FCcutoff en EnhancedVolcanoSe fijan en el análisis o se dibujan como series adicionalesaxvline, axhline y una columna de colorCada línea es su propia serie; una serie por color
Etiquetas de genesLos 10 más significativos, los N primeros o los genes que nombresggrepel, o selectLab en EnhancedVolcanoEtiquetados punto a puntoannotate o adjustTextEtiquetas de datos, una a una
Acabado de revistaCinco preajustes de revistaTemas escritos a manoPlantillas de gráficos de PrismrcParams escritos a manoFormato a mano
Qué necesitasUn navegadorR y BioconductorUna licencia de PrismPython y matplotlibExcel

¿Ya tienes un volcano de ggplot2 que te gusta? Adjunta una captura como imagen de referencia junto a la tabla, y el generador de volcano plots mantiene tus números siguiendo ese aspecto.

Preguntas sobre el generador de volcano plots

¿Qué muestra un volcano plot?

Qué genes cambiaron entre dos condiciones, cuánto y con qué fiabilidad, todo a la vez. Cada punto es un gen: su posición de izquierda a derecha es el log₂ fold change y su altura el −log₁₀ del valor p. Cuanto más alto y más hacia fuera está un punto, mayor y más seguro es el cambio; la base gris cerca de cero son los genes que no cambiaron.

¿Cómo se lee un volcano plot?

Lee en horizontal el tamaño y la dirección del cambio (la derecha es al alza, la izquierda a la baja, ±1 es una duplicación o una reducción a la mitad) y luego en vertical la evidencia (1.3 es p = 0.05, y cada unidad por encima es diez veces menor). Los resultados quedan en las dos esquinas superiores, fuera de las líneas discontinuas. El recorrido de arriba lee las seis regiones en un ejemplo de 20 genes.

¿Qué umbral de log₂ fold change debe usar un volcano plot?

|log₂FC| ≥ 1, un cambio de 2 veces, es el más común; 0.58 (1.5 veces) se usa donde se esperan efectos pequeños, como en proteómica, microarrays o datos de célula única. El umbral es una decisión de presentación, así que indícalo en la leyenda de la figura. En el generador de volcano plots, escríbelo en la instrucción («|log2FC| > 0.58») o como un cambio de N veces («1.5 veces»), que se convierte a log₂.

¿El eje y debe mostrar el valor p o el valor p ajustado?

El que se usó para el umbral de significación, para que la línea horizontal signifique lo que dice la leyenda. Con miles de genes analizados, la mayoría de los artículos aplican el umbral y representan el p ajustado por Benjamini–Hochberg (padj, FDR, q). El generador de volcano plots titula el eje −log₁₀(valor p ajustado) cuando los valores están ajustados y −log₁₀(valor p) en caso contrario.

¿Por qué mi volcano plot está descompensado?

Porque subieron más genes de los que bajaron, o al revés: un volcano plot es tan simétrico como la biología. Que toda la base gris se desplace lejos de x = 0 es otra cosa. Suele indicar un problema de normalización y conviene revisarlo en un MA plot antes de leer los resultados. El generador de volcano plots nunca refleja la nube para que parezca equilibrada.

¿Por qué los puntos se amontonan en una fila plana en lo alto de mi volcano plot?

Sus valores p eran demasiado pequeños para almacenarse y se escribieron como 0, así que −log₁₀ p es infinito y el programa de gráficos los fija a una misma altura. Es frecuente con el p_val_adj de Seurat y con RNA-seq muy profundo. El generador de volcano plots dibuja esos genes en el menor p distinto de cero de la tabla y lo indica en la figura; darlos como p < 10⁻³⁰⁰ es honesto, inventar un valor exacto no.

¿Cómo hago un volcano plot en R?

Con ggplot2, añade una columna de clase (al alza, a la baja, no significativo) y luego ggplot(res, aes(log2FoldChange, -log10(padj), colour = class)) + geom_point() + geom_vline(xintercept = c(-1, 1), linetype = 2) + geom_hline(yintercept = -log10(0.05), linetype = 2), con ggrepel para las etiquetas. EnhancedVolcano reúne los mismos pasos en sus argumentos pCutoff y FCcutoff. Para saltarte el código, adjunta al generador de volcano plots la tabla que guardó write.csv().

¿Cómo hago un volcano plot en GraphPad Prism?

Prism dibuja un volcano plot automáticamente cuando analizas una tabla agrupada con múltiples pruebas t (Prism 8 y posteriores): los resultados incluyen un gráfico de la diferencia frente al −log₁₀ p. Con una tabla de resultados hecha en otro sitio, introduce el log₂ fold change como X y el −log₁₀ p como Y en una tabla XY y añade las líneas de umbral como conjuntos de datos adicionales, o adjunta esa tabla al generador de volcano plots.

¿Puedo hacer un volcano plot en Excel o en Python?

En Excel, añade una columna =-LOG10(C2) junto a los valores p, haz una dispersión XY del fold change frente a ella y añade cada línea de umbral como su propia serie de dos puntos; colorear las clases exige una serie por clase. En Python, plt.scatter(df.log2FoldChange, -np.log10(df.padj), c=colours) con plt.axvline y plt.axhline hace lo mismo, y adjustText coloca las etiquetas. El generador de volcano plots acepta la misma hoja en .xlsx o .csv sin columna de fórmula.

¿Puede el generador de volcano plots leer directamente mi archivo de DESeq2 o Seurat?

Sí: el generador de volcano plots lee los resultados de DESeq2, edgeR, limma, Seurat y Perseus por los encabezados de sus columnas, en .csv, .tsv o .xlsx, hasta 60 000 filas. Las filas con NA se omiten, se usa el p ajustado cuando el archivo lo tiene y una columna Fold change simple se convierte a log₂.

¿El generador de volcano plots calcula los valores p?

No: el generador de volcano plots lee los valores p de tu tabla y nunca ejecuta la estadística. Haz la prueba en DESeq2, edgeR, limma o tu programa de proteómica; a partir de esos números el generador de volcano plots calcula exactamente el −log₁₀ p, la clase de cada gen, los recuentos, los ejes y las líneas de umbral.

¿Qué genes etiqueta el generador de volcano plots?

Por defecto el generador de volcano plots etiqueta los diez resultados más significativos, repartidos entre el lado sobreexpresado y el infraexpresado. Escribe «etiqueta los 20 primeros», «sin etiquetas» o nombra los genes («resalta NANOG, SOX2 y MYC»); los genes nombrados se etiquetan aunque estén en gris.

¿Cuántos genes puede dibujar el generador de volcano plots?

El generador de volcano plots admite hasta 60 000 filas, suficiente para un transcriptoma completo. Hasta 200 genes, cada punto se coloca en sus coordenadas exactas. Por encima, los genes más significativos (hasta 300) se colocan exactamente y el resto se dibuja a partir de sus recuentos y su dispersión reales, franja a franja, mientras la leyenda conserva los recuentos exactos de sobreexpresados, infraexpresados y no significativos.

Pon tu tabla de resultados en el generador de volcano plots

Pega los genes o adjunta el archivo de DESeq2, edgeR, limma o Seurat, y el generador de volcano plots te devuelve una figura con estilo de revista, con umbrales, recuentos y etiquetas exactos.

Abrir el generador de volcano plots