Scientific FigureScientific Figure
Генератор вулкан-плотов

Вулкан-плот: генератор онлайн

Генератор вулкан-плотов для результатов RNA-seq, протеомики и метаболомики в статьях и диссертациях: гены с повышенной и пониженной экспрессией разделены по вашим порогам, главные находки подписаны, а их число указано в легенде, и всё это рассчитано по вашей таблице.

Журнальные стили в генераторе вулкан-плотов

Пять журнальных оформлений из генератора вулкан-плотов, каждое на своей иллюстративной таблице результатов: печень нокаутных мышей, маркеры отдельных клеток, засухоустойчивость растений, микрочип курильщиков и фосфопротеомный скрининг. Нажмите на карточку, чтобы загрузить её запрос и гены.

Nature

Оформление Nature в генераторе вулкан-плотов: приглушённый кирпично-красный и стальной синий, курсивные названия генов, без рамки.

Cell Press

Маркеры Seurat в генераторе вулкан-плотов поднимаются выше y = 80, и ось y масштабирована под них.

PLOS

Безопасные для дальтоников киноварь и небесно-голубой с подписями в рамках: оформление PLOS в генераторе вулкан-плотов.

Bioinformatics

Таблица limma в генераторе вулкан-плотов, оформленная так, чтобы читаться при печати в оттенках серого.

Препринт (ggplot2)

Фосфосайты в подписях и линия p < 0.01 в стиле ggplot2 генератора вулкан-плотов.

Примеры вулкан-плотов

Четыре примера вулкан-плотов из генератора вулкан-плотов (RNA-seq, протеомика, метаболомика и подписанный набор генов), каждый — реальный рендер запроса и таблицы со своей карточки. Нажмите на карточку, чтобы перенести её запрос и гены в поле ввода.

RNA-seq: препарат против носителя

Настройки генератора вулкан-плотов по умолчанию: десять подписей, самые значимые находки с обеих сторон.

Протеомика: гипоксия против нормоксии

Безметочная протеомика в генераторе вулкан-плотов, с log₂-отношениями и p-значениями t-теста.

Метаболомика с обычной кратностью

Обычные кратности изменения из таблицы метаболомики; генератор вулкан-плотов откладывает их log₂.

Выделить шесть названных генов

Назовите гены, и генератор вулкан-плотов подпишет именно их, серые они или нет.

Что такое вулкан-плот?

Вулкан-плот (volcano plot) показывает результат дифференциальной экспрессии на одной картинке: каждый ген — одна точка, его log₂ кратности изменения между двумя условиями по оси x и −log₁₀ его p-значения по оси y. Гены, изменившиеся сильно и надёжно, поднимаются в два верхних угла, а неизменившиеся образуют низкое широкое основание около нуля — форму, давшую графику название. Пунктирные пороговые линии кратности изменения и значимости делят точки на гены с повышенной экспрессией, с пониженной и незначимые.

Об этом генераторе вулкан-плотов

  • Генератор вулкан-плотов вычисляет в коде по вашей таблице −log₁₀ p, класс каждого гена, их число, обе оси и пороговые линии и передаёт каждую координату модели изображений. Модель лишь расставляет их.
  • Пороги генератора вулкан-плотов по умолчанию: |log₂ fold change| ≥ 1 (двукратное изменение) и p < 0.05, понимаемое как скорректированное, если ваши значения — padj, FDR или q-значения. Меняйте их в запросе: «|log2FC| > 0.58 and padj < 0.01».
  • Обычные кратности изменения пересчитываются: если в запросе сказано fold change и нигде нет log (лактат 3.2), генератор вулкан-плотов откладывает log₂ 3.2 = 1.68. Для файла это решает заголовок столбца.
  • До 200 генов генератор вулкан-плотов выводит каждую точку точно. Выше этого самые значимые гены ставятся точно, а серое основание рисуется по его истинному числу и форме, так что таблица на 20 000 генов сохраняет реальные подсчёты.

Как читать вулкан-плот, точка за точкой

Двадцать иллюстративных генов из сравнения RNA-seq интерферона-бета против контрольной обработки, нарисованных тем же кодом, что работает в генераторе вулкан-плотов, при |log₂FC| ≥ 1 и padj < 0.05. Номера на рисунке соответствуют шагам.

Вулкан-плот 20 иллюстративных генов, интерферон-бета против контроля: шесть генов с повышенной экспрессией справа вверху во главе с IFIT1, четыре с пониженной слева вверху во главе с COL1A1, STAT1 высоко, но внутри линий кратности, CXCL10 далеко справа, но ниже линии значимости, и серые неизменившиеся гены у основания−6−4−20246051015log₂ кратности изменения (интерферон-бета / контроль)−log₁₀(скорректированное p)CXCL10STAT1COL1A1TGFBIIFIT1ISG15RSAD21233456
Таблица разбора так, как её раскладывает генератор вулкан-плотов: пунктирные линии на log₂ fold change ±1 и на −log₁₀ 0.05 = 1.3, находки в цвете, остальное серым.
  1. 1

    По горизонтали: направление и величина изменения

    x — log₂ кратности изменения интерферона-бета относительно контроля. 0 — нет изменения, +1 — вдвое больше, −1 — вдвое меньше, а IFIT1 на +5.1 примерно в 34 раза выше. Шкала симметрична: уменьшение вдвое стоит слева так же далеко, как удвоение справа.

  2. 2

    По вертикали: доказательность, а не величина

    y — −log₁₀ скорректированного p. Пунктирная линия на 1.3 — это padj 0.05, 2 — это 0.01, а IFIT1 на 13.7 имеет padj 2 × 10⁻¹⁴. Чем выше, тем менее вероятно, что изменение — шум; о его величине высота ничего не говорит.

  3. 3

    В верхних углах — находки

    Правее x = 1 и выше линии стоят шесть генов с повышенной экспрессией (IFIT1, ISG15, MX1, RSAD2, OAS1, IRF7); левее −1 — четыре с пониженной (COL1A1, TGFBI, MYC, CCND1). Именно эти числа сообщают в статье.

  4. 4

    Высоко в середине: значимо, но мало

    STAT1 стоит в (0.7, 8.5): его изменение измерено очень точно, но составляет лишь 1.6 раза, меньше двукратной линии, поэтому он остаётся серым. FN1 ведёт себя так же ниже, на стороне понижения.

  5. 5

    Далеко, но низко: велико, но неопределённо

    CXCL10 стоит в (3.9, 0.9): в среднем в 15 раз выше, но padj равен 0.12. Именно такую точку дают малое число прочтений или расходящиеся повторности. При этих порогах это не находка, но на неё стоит взглянуть ещё раз.

  6. 6

    Серое основание: то, что не изменилось

    ACTB, GAPDH и другие гены домашнего хозяйства теснятся около (0, 0). На полногеномном вулкан-плоте RNA-seq это основание вмещает большинство из 15 000–25 000 проверенных генов.

Отправьте эти 20 генов в генератор вулкан-плотов, затем измените один порог в запросе и посмотрите, как точки пересекают линии.

Как пользоваться генератором вулкан-плотов

1

Дайте генератору вулкан-плотов ваши гены

Вводите по гену на строку: название, log₂ кратности изменения, p (FKBP5 3.1, 1.2e-12; CCL2 −2.2, 5e-7) или прикрепите таблицу результатов в .csv, .tsv или .xlsx. Заголовки DESeq2, edgeR, limma, Seurat и Perseus распознаются, до 60 000 строк.

2

Укажите сравнение и пороги

Напишите Treated vs Control для названия оси и пороги, если они не |log₂FC| ≥ 1 и p < 0.05 (для скорректированных значений скажите padj или FDR). Назовите гены для подписи или попросите топ-N; по умолчанию подписываются десять самых значимых находок с обеих сторон.

3

Выберите журнальный стиль и постройте

Nature, Cell Press, PLOS, Bioinformatics или препринтное оформление в духе ggplot2. Генератор вулкан-плотов вычисляет координаты, классы, подсчёты и пороговые линии до того, как модель изображений начнёт рисовать, и пересчитывает их при каждой следующей правке.

Какие столбцы DESeq2, edgeR, limma и Seurat идут на вулкан-плот

Каждый конвейер записывает одни и те же три числа под разными именами. Вот столбцы, которые генератор вулкан-плотов читает из каждой таблицы результатов, так что файл можно прикрепить ровно в том виде, в каком он экспортирован.

Таблица результатовx: log₂ кратности измененияy: p-значениеСкорректированное p (берётся первым)На что обратить внимание
DESeq2 results()log2FoldChangepvaluepadjpadj равен NA для генов, отсеянных независимой фильтрацией; такие строки пропускаются. Для построения и ранжирования авторы DESeq2 рекомендуют сжатые кратности изменения из lfcShrink().
edgeR topTags()logFCPValueFDRFDR по умолчанию рассчитывается по Бенджамини–Хохбергу. logCPM — средняя экспрессия, а не кратность изменения.
limma topTable()logFCP.Valueadj.P.ValB — логарифм шансов дифференциальной экспрессии, а не p-значение; не выносите его на ось y.
Seurat FindMarkers()avg_log2FCp_valp_val_adjp_val_adj скорректирован по Бонферрони по всем генам и часто равен ровно 0; такие гены рисуются на наименьшем ненулевом значении. Seurat v3 записывал avg_logFC в натуральном логарифме.
Perseus (MaxQuant)Difference−Log p-value (уже −log₁₀)q-valueСтолбец −log₁₀ пересчитывается обратно в p, чтобы логарифм не брался дважды.
Ваша собственная таблицаlog2FCp или pvaluepadj, FDR или qСтолбец с заголовком Fold change без log пересчитывается в log₂: 4 превращается в 2, 0.25 — в −2.

Если в файле есть и сырой, и скорректированный столбец p, генератор вулкан-плотов откладывает и применяет порог к скорректированному — именно с ним обычно сообщают результаты DESeq2, edgeR и limma. Чтобы отложить сырое p, прикрепите таблицу без скорректированного столбца.

Пороги вулкан-плота: что меняют |log₂FC| и padj

Два порога решают, какие точки считаются находками, и это выбор исследователя, а не факт данных. |log₂ fold change| ≥ 1 требует как минимум удвоения или уменьшения вдвое; padj < 0.05 допускает ожидаемые 5 % ложных открытий среди отобранных генов. Те же 20 генов из разбора при четырёх парах порогов, подсчитанные собственным кодом генератора вулкан-плотов:

ПорогиПовышеныПониженыНезначимыЧто сдвинулось
|log₂FC| ≥ 1, padj < 0.05 (обычные значения по умолчанию)6410STAT1 и FN1 проходят по p, но не по кратности, CXCL10 — по кратности, но не по p, поэтому все три остаются серыми.
|log₂FC| ≥ 0.58 (1.5 раза), padj < 0.05758Порог в 1.5 раза пропускает STAT1 и FN1: малые изменения, измеренные очень точно.
|log₂FC| ≥ 1, padj < 0.016311Более строгое p отсеивает CCND1 (padj 0.019). Все гены с повышенной экспрессией уже ниже 0.001, так что эта сторона не меняется.
|log₂FC| ≥ 2 (4 раза), padj < 0.0015114Остаётся только самый сильный интерфероновый ответ, без IRF7, и один ген с пониженной экспрессией, TGFBI.

Две ошибки, которых стоит избегать. Если порог применён к padj, а по оси y отложено сырое p, горизонтальная линия окажется там, где никакого порога не было, и серые точки могут оказаться выше неё. А порог, скопированный как 10e-6 из скрипта R, в R равен 10 × 10⁻⁶ = 1e-5, а не 1e-6. Скажите генератору вулкан-плотов, какое p вы откладываете, и линия ляжет ровно на это значение.

Что рисует генератор вулкан-плотов: RNA-seq, протеомика, одноклеточные данные и другое

Семь вулкан-плотов, которые встречаются в статьях и диссертациях: чем каждый отличается и что сказать генератору вулкан-плотов, чтобы его получить.

Вулкан-плот RNA-seq (DESeq2, edgeR, limma-voom)

Самый распространённый вулкан-плот: по точке на ген из 15 000–25 000 проверенных генов, со скорректированным p (padj или FDR) по оси y. Сжатые кратности изменения из lfcShrink() в DESeq2 не дают генам с малым числом прочтений улетать к ±8. Прикрепите файл результатов в экспортированном виде; при числе генов больше 200 генератор вулкан-плотов ставит значимые точно, а серое основание рисует по подсчётам.

Протеомный вулкан-плот

Log₂-отношение интенсивностей белков (безметочное LFQ или TMT) против −log₁₀ p из t-теста или limma, обычно для 2 000–6 000 белков. Подписывайте по названию гена, а не по номеру UniProt. Perseus часто рисует изогнутую линию значимости (FDR с константой s0); генератор вулкан-плотов рисует прямые пороги, поэтому укажите применённые |log₂FC| и p.

Вулкан-плот метаболомики и липидомики

Кратности изменения часто сообщают как обычные отношения (опухоль/норма = 3.2), с p из t-теста или критерия Уилкоксона и FDR. Напишите fold change без log, и генератор вулкан-плотов пересчитает значения: 3.2 откладывается на 1.68, а 0.5 — на −1. Обычно признаков несколько сотен, поэтому каждая точка выводится точно.

Вулкан-плот маркеров отдельных клеток (Seurat FindMarkers)

Один кластер против всех остальных клеток, avg_log2FC по x и p_val_adj по y. При тысячах клеток на тест p-значения доходят до 10⁻⁸⁰ и ниже, поэтому ось y уходит гораздо выше, чем в bulk RNA-seq, а у многих генов p_val_adj = 0 — генератор вулкан-плотов рисует их на наименьшем сохранённом значении.

Вулкан-плот микрочипа (limma)

logFC и adj.P.Val из limma по log₂-интенсивностям, часто для наборов зондов, а не генов. Кратности изменения сжаты по сравнению с RNA-seq, поэтому порог в 1.5 раза (|log₂FC| ≥ 0.58) обычен. Генератор вулкан-плотов берёт подписи из столбца Symbol, а где символ пуст — ID зонда.

Вулкан-плот с подписями выделенных генов

Вулкан-плот, где названы выбранные гены, например путь, которому посвящена статья, а не главные находки. Напишите «highlight only NANOG, SOX2 and MYC», и генератор вулкан-плотов подпишет именно их, даже если они серые, — часто в этом и смысл рисунка.

Вулкан-плоты фосфопротеомики и CRISPR-скринингов

Те же оси для других единиц: фосфосайты (EGFR_Y1068) в фосфопротеомике или гены из скрининга MAGeCK с log₂ кратности изменения числа их гидов. Подписями могут быть названия сайтов; скажите генератору вулкан-плотов, что такое одна точка, и названия осей это отразят.

Вулкан-плот или MA-плот

Вулкан-плот откладывает кратность изменения против значимости; MA-плот — кратность изменения против средней экспрессии. Оба строятся по одной таблице результатов. Вулкан-плот отвечает, какие гены надёжно изменились; MA-плот — зависят ли кратности изменения от того, насколько сильно экспрессируется ген.

Вулкан-плот

MA-плот

КритерийВулкан-плотMA-плот
Ось xlog₂ кратности изменениясредняя экспрессия в логарифмической шкале (A: baseMean в DESeq2, logCPM в edgeR, AveExpr в limma)
Ось y−log₁₀ p или скорректированного plog₂ кратности изменения (M)
ФормаV, поднимающаяся из широкого основания на x = 0плоская полоса около M = 0, расходящаяся веером при низкой экспрессии
На что отвечаеткакие гены изменились сильно и надёжноне раздувают ли кратности гены с малым числом прочтений и центрировала ли нормализация M на 0
Где используетсярисунок с результатами, с подписанными находкамиконтроль качества и дополнительные рисунки

Генератор вулкан-плотов рисует вулкан-плоты. Чтобы показать те же находки по всем образцам, используйте генератор тепловых карт с их нормализованной экспрессией.

Генератор вулкан-плотов, R, Prism, Python или Excel

Большинство вулкан-плотов рисуют в R по таблице DESeq2 или limma, в GraphPad Prism после множественных t-тестов или в Python. Вот где в каждом случае ложится работа:

КритерийГенератор вулкан-плотовR (ggplot2, EnhancedVolcano)GraphPad PrismPython (matplotlib)Excel
Отправная точкаВведённые строки или таблица DESeq2, edgeR, limma или Seurat в экспортированном видеДатафрейм результатов и скриптАнализ множественных t-тестов или XY-таблица кратности изменения и −log₁₀ pDataFrame pandas и скриптСтолбцы кратности и p плюс вспомогательный столбец =-LOG10(C2)
−log₁₀ pВычисляется по таблице-log10(padj) в aes(); EnhancedVolcano делает это за васВычисляется анализом t-тестов-np.log10(df.padj)Ваша формула
Пороговые линии и цветаПо указанным вами порогам (по умолчанию 1 и 0.05), классы подсчитаныgeom_vline, geom_hline и столбец классов; pCutoff и FCcutoff в EnhancedVolcanoЗадаются в анализе или рисуются дополнительными рядамиaxvline, axhline и столбец цветовКаждая линия — свой ряд; по ряду на цвет
Подписи геновТоп-10 по значимости, топ-N или названные вами геныggrepel или selectLab в EnhancedVolcanoПодписываются по одной точкеannotate или adjustTextПодписи данных, по одной
Журнальное оформлениеПять пресетов изданийТемы пишутся вручнуюШаблоны графиков PrismrcParams пишутся вручнуюФорматирование вручную
Что нужноБраузерR и BioconductorЛицензия PrismPython и matplotlibExcel

Уже есть вулкан-плот в ggplot2, который вам нравится? Прикрепите скриншот как референсное изображение рядом с таблицей, и генератор вулкан-плотов сохранит ваши числа, следуя этому виду.

Вопросы о генераторе вулкан-плотов

Что показывает вулкан-плот?

Какие гены изменились между двумя условиями, насколько и насколько надёжно, всё сразу. Каждая точка — один ген: положение слева направо — log₂ кратности изменения, высота — −log₁₀ p-значения. Чем выше и дальше от центра точка, тем больше и достовернее изменение; серое основание около нуля — гены, которые не изменились.

Как читать вулкан-плот?

По горизонтали читайте величину и направление изменения (справа — повышение, слева — понижение, ±1 — удвоение или уменьшение вдвое), затем по вертикали — доказательность (1.3 — это p = 0.05, и каждая единица выше означает p в десять раз меньше). Находки стоят в двух верхних углах за пунктирными линиями. Разбор выше читает все шесть областей на одном примере из 20 генов.

Какой порог log₂ кратности изменения брать для вулкан-плота?

|log₂FC| ≥ 1, то есть двукратное изменение, — самый распространённый; 0.58 (1.5 раза) берут, когда ожидаются малые эффекты, как в протеомике, микрочипах или одноклеточных данных. Порог — выбор при представлении результатов, поэтому укажите его в подписи к рисунку. В генераторе вулкан-плотов напишите его в запросе («|log2FC| > 0.58») или как кратность («1.5-fold»), которая пересчитается в log₂.

Что откладывать по оси y: p-значение или скорректированное p?

То, к которому применён порог значимости, чтобы горизонтальная линия значила то, что написано в подписи. При тысячах проверенных генов большинство статей применяют порог и откладывают p, скорректированное по Бенджамини–Хохбергу (padj, FDR, q). Генератор вулкан-плотов подписывает ось −log₁₀(скорректированное p), если значения скорректированы, и −log₁₀(p) в остальных случаях.

Почему мой вулкан-плот кривобокий?

Потому что генов с повышенной экспрессией больше, чем с пониженной, или наоборот: вулкан-плот симметричен ровно настолько, насколько симметрична биология. Сдвиг всего серого основания от x = 0 — другое дело. Обычно он указывает на проблему нормализации, и его стоит проверить на MA-плоте, прежде чем читать находки. Генератор вулкан-плотов никогда не отражает облако, чтобы оно выглядело уравновешенным.

Почему точки скапливаются плоским рядом наверху моего вулкан-плота?

Их p-значения были слишком малы для хранения и записаны как 0, поэтому −log₁₀ p бесконечен, и программа построения прижимает их к одной высоте. Это часто бывает с p_val_adj в Seurat и очень глубоким RNA-seq. Генератор вулкан-плотов рисует такие гены на наименьшем ненулевом p таблицы и отмечает это на рисунке; сообщить о них как p < 10⁻³⁰⁰ честно, выдуманное точное значение — нет.

Как построить вулкан-плот в R?

В ggplot2 добавьте столбец классов (up, down, not significant), затем 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) и ggrepel для подписей. EnhancedVolcano упаковывает те же шаги в аргументы pCutoff и FCcutoff. Чтобы обойтись без кода, прикрепите к генератору вулкан-плотов таблицу, сохранённую через write.csv().

Как построить вулкан-плот в GraphPad Prism?

Prism рисует вулкан-плот автоматически, когда вы анализируете сгруппированную таблицу множественными t-тестами (Prism 8 и новее): в результатах есть график разности против −log₁₀ p. Для таблицы результатов, полученной в другой программе, введите log₂ кратности изменения как X и −log₁₀ p как Y в XY-таблицу и добавьте пороговые линии дополнительными наборами данных или прикрепите эту таблицу к генератору вулкан-плотов.

Можно ли построить вулкан-плот в Excel или Python?

В Excel добавьте рядом с p-значениями столбец =-LOG10(C2), постройте точечную диаграмму кратности изменения против него и добавьте каждую пороговую линию отдельным рядом из двух точек; раскраска классов требует по ряду на класс. В Python то же делает plt.scatter(df.log2FoldChange, -np.log10(df.padj), c=colours) с plt.axvline и plt.axhline, а adjustText расставляет подписи. Генератор вулкан-плотов принимает ту же таблицу как .xlsx или .csv без столбца с формулой.

Может ли генератор вулкан-плотов прочитать мой файл DESeq2 или Seurat напрямую?

Да: генератор вулкан-плотов читает результаты DESeq2, edgeR, limma, Seurat и Perseus по заголовкам столбцов из .csv, .tsv или .xlsx, до 60 000 строк. Строки с NA пропускаются, скорректированное p используется, если оно есть в файле, а обычный столбец Fold change пересчитывается в log₂.

Генератор вулкан-плотов сам вычисляет p-значения?

Нет: генератор вулкан-плотов читает p-значения из вашей таблицы и никогда не проводит статистический анализ. Проведите тест в DESeq2, edgeR, limma или вашей программе для протеомики; по этим числам генератор вулкан-плотов точно вычисляет −log₁₀ p, класс каждого гена, подсчёты, оси и пороговые линии.

Какие гены подписывает генератор вулкан-плотов?

По умолчанию генератор вулкан-плотов подписывает десять самых значимых находок, распределённых между сторонами повышения и понижения. Напишите «label the top 20», «no labels» или назовите гены («highlight NANOG, SOX2 and MYC»); названные гены подписываются, даже если они серые.

Сколько генов может нарисовать генератор вулкан-плотов?

Генератор вулкан-плотов принимает до 60 000 строк — достаточно для целого транскриптома. До 200 генов каждая точка ставится по точным координатам. Выше этого самые значимые гены (до 300) ставятся точно, а остальные рисуются по их истинному числу и разбросу, полоса за полосой, при этом легенда сохраняет точные числа повышенных, пониженных и незначимых.

Загрузите таблицу результатов в генератор вулкан-плотов

Вставьте гены или прикрепите файл DESeq2, edgeR, limma или Seurat, и генератор вулкан-плотов вернёт рисунок в журнальном стиле с точными порогами, подсчётами и подписями.

Открыть генератор вулкан-плотов