LabCanvas
Free account · save your work, full figure editorSign up free

Volcano plot maker for differential expression

Paste a differential-expression table (gene, log2 fold change, p-value, and the adjusted p-value if you have it) from DESeq2, edgeR, limma, proteomics or any t-tests. Set the fold-change and p or FDR thresholds, and the tool draws a volcano plot of log2 fold change against −log10 p, colours up-regulated, down-regulated and non-significant genes, labels the top genes and counts the hits. If you only have raw p-values it computes Benjamini–Hochberg adjusted p-values. Download the plot as SVG or 300 dpi PNG and the significant genes as CSV.

What it does
Draws a volcano plot (log2 fold change vs −log10 p) from a pasted gene table, adjusts p-values by Benjamini–Hochberg if needed, colours and counts up- and down-regulated genes and labels the top hits.
Formula
up: log2⁡FC≥t and padj<αdown: log2⁡FC≤−t and padj<αBH: padj(i)=minj≥ip(j)⋅m/j(p sorted ascending, m tests)y=−log10⁡p
Example
In the built-in table of 1,000 genes, FDR < 0.05 and |log2FC| ≥ 1 give 25 up and 16 down; the top gene has p = 3.42 × 10⁻¹² and p_adj = 3.42 × 10⁻¹² × 1000 / 1 = 3.42 × 10⁻⁹.

Last updated

FreeNo sign-upRuns in your browserData analysis

Loading Volcano plot maker…

At a glance

Volcano plot maker at a glance
InputGene, log2 fold change, p-value and optionally adjusted p (DESeq2, edgeR, limma headers recognised)
Axesx=log2 fold change, y=−log10 p-value
Significance|log2⁡FC|≥threshold and adjusted p (FDR) or raw p below α
AdjustmentBenjamini–Hochberg (1995), the same as R’s p.adjust("BH") and DESeq2’s padj
LabelsTop N genes by p-value, de-overlapped
ExportSVG and 300 dpi PNG plot; CSV of significant genes
Runs inYour web browser; nothing is uploaded
PriceFree, no account needed

What it does

How to use the volcano plot maker

  1. Paste the results tableCopy the gene, log2 fold change and p-value columns (and padj / FDR if present) with their header row from Excel or R.
  2. Set the thresholdsChoose the fold-change cut-off (1 = 2-fold) and the significance level, on the adjusted p-value (FDR, recommended) or the raw p-value.
  3. Label and exportChoose how many top genes to label, adjust colours and title, then download the plot as SVG or PNG and the significant genes as CSV.

How it works

A volcano plot shows every gene (or protein, metabolite) at x=log2 fold change and y=−log10 p-value, so large, reliable changes sit at the top left (down) and top right (up) and look like the plume of a volcano (Li 2012). A log₂ fold change of 1 is a 2-fold change; 0.585 is 1.5-fold. On the y axis, p=0.05 is at 1.30, p=0.001 at 3 and p=10−10 at 10.

Classification. A gene is up if log2⁡FC≥t and its p-value is below α, down if log2⁡FC≤−t and p<α, and not significant otherwise. You choose whether α applies to the adjusted p-value (the false discovery rate, the standard for genome-wide data) or the raw p-value. The y axis always shows the raw p-value, as in DESeq2 and EnhancedVolcano; with FDR the horizontal line is drawn at the largest raw p whose adjusted p passes, so the line still separates significant from not.

Benjamini–Hochberg adjustment. With m p-values sorted from smallest to largest, p(1)≤⋯≤p(m), the adjusted value of the i-th is padj(i)=minj≥i(p(j)⋅m/j), capped at 1. Calling every gene with padj<α keeps the expected proportion of false discoveries among the hits at or below α (Benjamini and Hochberg 1995). This is R’s p.adjust(method = "BH") and the padj column of DESeq2. If your table already has an adjusted column (padj, FDR, q-value, adj.P.Val), the tool uses it.

By hand. Five p-values 0.005, 0.01, 0.03, 0.04, 0.5 (m=5): the raw products p⋅m/rank are 0.025, 0.025, 0.05, 0.05, 0.5; taking the running minimum from the largest down leaves them unchanged, so at FDR<0.05 only the first two are significant, although four have p<0.05.

p-values reported as 0 (below the precision of the software) are drawn at the smallest non-zero p in the data divided by 10, so they stay on the plot.

Sources: Benjamini Y, Hochberg Y. Controlling the false discovery rate: a practical and powerful approach to multiple testing. J R Stat Soc B 1995;57:289–300, doi:10.1111/j.2517-6161.1995.tb02031.x. Li W. Volcano plots in analyzing differential expressions with mRNA microarrays. J Bioinform Comput Biol 2012;10:1231003, doi:10.1142/S0219720012310038.

Worked example: 1,000 genes with raw p-values

The built-in table is synthetic: 1,000 genes with a log₂ fold change and a raw p-value, of which 40 were simulated as changed (24 up, including hypoxia-response genes such as VEGFA and CA9, and 16 down, proliferation genes such as MKI67). There is no adjusted column, so the tool computes Benjamini–Hochberg adjusted p-values.

  1. Adjustment. The smallest p-value, DDIT4 (log₂FC 2.21, p=3.42×10−12), has rank 1, so padj=3.42×10−12×1000/1 =3.42×10−9. VEGFA (log₂FC 3.06, p=2.48×10−10) ranks 5th: 2.48×10−10×1000/5=4.96×10−8.
  2. Thresholds. With FDR<0.05 and |log2⁡FC|≥1 (2-fold), the plot shows 25 up and 16 down. 103 genes pass FDR<0.05 on their own; the largest raw p among them is 0.00469, which is where the horizontal line is drawn (−log10⁡0.00469=2.33). 230 genes have a raw p<0.05, which shows why the fold-change cut-off and the adjustment matter.
  3. One false positive. Of the 25 up genes, 24 are the simulated changes and one (GENE0386, log₂FC 1.01, p=0.00061) is a null gene that crossed both lines by chance: 1 of 41 calls, within the 5% false discovery rate.
  4. Looser threshold. At 1.5-fold (|log2⁡FC|≥0.585) the counts rise to 35 up and 27 down; at FDR<0.01 and 2-fold they fall to 24 up and 15 down.
Fold change and −log10 p at a glance
Fold changelog2⁡FCp-value−log10⁡p
1.5× up / down±0.5850.051.30
2× up / down±10.012
4× up / down±20.0013
8× up / down±310−66
Column names the tool recognises
SoftwareFold changep-valueAdjusted p
DESeq2log2FoldChangepvaluepadj
edgeRlogFCPValueFDR
limmalogFCP.Valueadj.P.Val

Frequently asked questions

How do I make a volcano plot from my data?

Paste the gene, log2 fold change and p-value columns (with headers) into the box, set the fold-change and FDR thresholds, and the plot appears. Download it as SVG or a 300 dpi PNG; the significant genes download as CSV.

How do I make a volcano plot in Excel?

Excel can do it as a scatter chart of log2FC against =-LOG10(p), with colours set by hand for each group of points. This tool does the same from a pasted Excel range, adds the FDR adjustment, labels and counts, and exports a figure.

Should I use the p-value or the adjusted p-value (FDR)?

Use the adjusted p-value for genome-wide data: with 20,000 genes, about 1,000 would have p < 0.05 by chance alone. The y axis still shows the raw p-value, as in DESeq2 and EnhancedVolcano; only the colouring follows the FDR.

What log2 fold change cut-off should I use?

A log2 fold change of 1 (2-fold) is the most common; 0.585 (1.5-fold) is also used, especially for proteomics. The cut-off is a convention, so state it in the figure legend together with the FDR threshold.

How is the Benjamini–Hochberg FDR calculated?

Sort the m p-values from smallest to largest, multiply each by m and divide by its rank, then go up the list from the bottom keeping the running minimum, and cap at 1. A gene with an adjusted p below 0.05 is significant at 5% FDR.

What does −log10 p mean on the y axis?

It turns small p-values into large numbers: p=0.05 is 1.3, p=0.01 is 2 and p=10−8 is 8. The higher a point, the stronger the evidence that the gene changed.

Why do some genes have p = 0?

DESeq2, edgeR and R report p-values below about 10−308 as 0. The tool draws them at the smallest non-zero p in the table divided by 10 and says how many there are.

Can I use it for proteomics or metabolomics?

Yes. Any table of features with a log2 fold change and a p-value works: proteins, metabolites, lipids or phosphosites.

Build the whole figure

Put the volcano plot next to heatmaps, bar charts and blots in the LabCanvas Graphs app, with journal sizes and fonts.

Open the Graphs app