✦ Manhattan Plot Generator

Manhattan Plot Generator for GWAS results

Upload GWAS summary statistics and get a publication-ready Manhattan plot with the genome-wide significance line at 5×10⁻⁸, the suggestive line at 1×10⁻⁵ and labeled lead SNPs, plus a QQ plot with the genomic inflation factor λ. No R or qqman required.

Your data

Free account · daily credits included · no credit card

Preview

Example result · reference figure drawn from this sample data

Manhattan plot of a GWAS across 22 autosomes with four loci above the genome-wide significance line at P = 5×10⁻⁸ and their lead SNPs labeled
Free daily creditsEditable SVG exportPublication-ready output
Fig. 01 — Examples

Manhattan plot examples

These are reference figures drawn from the sample datasets above (simulated GWAS of the 22 autosomes, thinned to 9,000 and 8,000 SNPs), not FigCanvas outputs; the prompts are what you would ask FigCanvas for. In the Manhattan example 27 SNPs in 4 loci pass P < 5×10⁻⁸, the strongest on chromosome 6 at P = 6.3×10⁻²⁰, and λ is 1.03. The QQ example comes from a second simulated GWAS with λ = 1.16, the early lift-off from the diagonal that points to population stratification.

Manhattan plot of a GWAS across 22 autosomes with four loci above the genome-wide significance line at P = 5×10⁻⁸ and their lead SNPs labeled
Fig. 1aManhattan plot
QQ plot of GWAS P values against the expected uniform distribution with a 95% confidence band and the genomic inflation factor λ = 1.16
Fig. 1bQQ plot with λ
§ Reading the plot

What a Manhattan plot shows

A Manhattan plot shows the result of a genome-wide association study (GWAS) in one figure: every tested variant is a point, placed by its position along the genome on the x-axis and by −log10 of its P value on the y-axis. Strong associations rise as towers above a dense band of null results, like skyscrapers on a skyline, which gives the plot its name.

How to read a Manhattan plot

Chromosomes run left to right in alternating colors, and positions within each chromosome are in base pairs. The higher a point, the smaller its P value: −log10(P) = 7.3 corresponds to P = 5×10⁻⁸, and 20 to P = 10⁻²⁰.

A real association looks like a tower, not a single point, because neighbouring variants in linkage disequilibrium with the causal variant carry part of the signal. An isolated point high above an empty region is more often a genotyping or imputation artefact and should be checked before it is reported.

Genome-wide and suggestive significance lines

The genome-wide significance threshold of P < 5×10⁻⁸ is a Bonferroni correction of 0.05 for about one million independent common-variant tests in European-ancestry genomes (Pe’er et al., Genetic Epidemiology 2008). It is drawn as a horizontal line at −log10(P) = 7.3. Studies of rare variants from whole-genome sequencing sometimes use stricter thresholds, such as the 5×10⁻⁹ proposed by Pulit et al. (2017).

The suggestive line at P < 1×10⁻⁵ (−log10(P) = 5) marks signals worth following up in a replication sample. It is a convention, not a significance claim: with a million independent tests, about 10 variants pass it by chance alone.

The QQ plot and genomic inflation λ

A quantile-quantile (QQ) plot sorts the observed −log10(P) values and plots them against the values expected if no variant were associated. Under the null, the points follow the diagonal. A few points lifting off at the top right are the true associations. A whole curve that leaves the diagonal early points to systematic inflation.

The genomic inflation factor λ (Devlin and Roeder, Biometrics 1999) is the median of the observed association chi-square statistics divided by 0.4549, the median of a chi-square distribution with 1 degree of freedom. Values near 1.0 are expected. λ above about 1.05–1.10 calls for checking population stratification, cryptic relatedness or batch effects. Highly polygenic traits in very large samples also inflate λ without any confounding, and the LD score regression intercept (Bulik-Sullivan et al., Nature Genetics 2015) separates the two.

Counting loci and labeling lead SNPs

Report loci, not SNPs. Dozens of correlated variants can pass the threshold at one locus, so they are grouped by distance (for example within 500 kb) or by linkage disequilibrium with PLINK clumping, and each locus is represented by its lead SNP, the variant with the smallest P value.

Label the lead SNP of each locus with its rs number or the nearest gene, and highlight the variants of the locus in a contrasting color. Keep labels to the genome-wide loci: labeling every suggestive peak makes the figure unreadable.

Fig. 03 — Data format

How to lay out data for a Manhattan plot

Use one row per variant. Output from PLINK, REGENIE, SAIGE, BOLT-LMM or the GWAS Catalog usually works as is: FigCanvas detects the chromosome, position and P value columns by name and content, and you can confirm the mapping before plotting.

chr
Chromosome, as 1–22 or chr1–chr22. X, Y and MT can be drawn after the autosomes.
bp
Base-pair position on that chromosome. Use one genome build (GRCh37 or GRCh38) for the whole file.
p
Association P value. A −log10(P) column, such as LOG10P from REGENIE, also works.
snp
Optional. Variant id such as an rs number, used to label the lead SNPs.
snpchrbpp
rs1218083415933290.928
rs2065914516399290.127
rs6131658418415570.508
rs54543422122267100.467

Full summary statistics work: λ and the QQ plot need every variant, and for the Manhattan plot FigCanvas can thin the non-significant SNPs (keep everything below P = 0.01 and a random sample of the rest), which leaves the figure unchanged but keeps vector files small. The upload on this page takes files up to 10 MB, about 300,000 rows of these four columns; for a genome-wide file of millions of variants, drop the extra columns or thin it before uploading.

§ MethodFour steps

How to make a Manhattan plot with FigCanvas

Go from GWAS summary statistics to a publication-ready Manhattan plot in four steps.

Step 01

Upload summary statistics

Upload a CSV, TSV or Excel file with chromosome, position and P value for each variant, or load one of the sample datasets.

Step 02

Confirm columns and options

FigCanvas identifies the chromosome, position, P value and SNP id columns and proposes the figure: significance lines, colors, lead SNP labels and an optional QQ plot.

Step 03

Generate the figure

Cumulative genome positions, −log10(P), the loci above 5×10⁻⁸ and λ are computed from your data in Python with pandas and SciPy, and the plot is drawn with journal-style defaults and colorblind-safe colors.

Step 04

Refine and export

Change thresholds, colors, labels or the chromosome range by asking in plain language, add the QQ plot as a second panel, then export SVG, PDF or PNG.

Fig. 04 — Why FigCanvas

Why researchers make their figures with FigCanvas

01

Thresholds and λ computed, not drawn

Significance lines, the loci that pass them and the genomic inflation factor come from Python code run on your data, so the figure matches your summary statistics.

02

Manhattan and QQ plot together

Ask for the QQ plot in the same session and get both panels with the same styling, ready for the main figure or the supplement.

03

No R or qqman setup

Skip installing qqman or CMplot and renaming columns to CHR, BP and P. Upload the file your GWAS software wrote and confirm the mapping.

04

Editable vector export

Export SVG or PDF and adjust labels, fonts or panel size in Illustrator or Inkscape to match the journal’s figure guidelines.

§ Q & AUpdated Nov 6, 2026

Manhattan plot FAQs

Yes. Upload GWAS summary statistics with chromosome, position and P value, and the FigCanvas Manhattan plot generator draws the Manhattan plot with the genome-wide (5×10⁻⁸) and suggestive (1×10⁻⁵) lines, labels the lead SNPs, and makes the QQ plot with the genomic inflation factor λ. You can sign up for free and make Manhattan and QQ plots with the free daily credits.

Upload the file and describe the plot, for example “Manhattan plot with alternating chromosome colors, lines at 5×10⁻⁸ and 1×10⁻⁵, label the top SNP per locus, plus a QQ plot”. FigCanvas writes and runs the Python code on your data, so the figure can be reproduced and changed in the same chat. In R this is manhattan() and qq() from qqman.

Yes. Files from PLINK, REGENIE, SAIGE, BOLT-LMM or the GWAS Catalog usually work without renaming columns, and FigCanvas can thin the non-significant SNPs so the plot stays light. The upload on this page takes files up to 10 MB, about 300,000 rows of chromosome, position, P value and SNP id. For larger files, keep only those four columns or thin out SNPs with P > 0.01 before uploading.

Chromosome, base-pair position and P value, plus an optional SNP id for labels. Names such as CHR, BP and P from PLINK, CHROM, GENPOS and LOG10P from REGENIE (which reports −log10 P), or chromosome, base_pair_location and p_value from the GWAS Catalog format are understood without renaming. Chromosomes X, Y and MT can be kept or dropped.

Yes. The QQ plot compares the sorted observed −log10(P) with the values expected if no variant were associated, and λ is the median association chi-square divided by 0.4549 (Devlin and Roeder, 1999). λ up to about 1.05 is usually accepted; above about 1.1, check population structure, although large studies of polygenic traits can exceed it with no confounding. The second example above has λ = 1.16.

Yes; ask for the top SNP per locus by rsID, or supply a nearest-gene column to use as labels. Say how loci are defined, for example a distance window around each lead SNP or LD clumping done beforehand in PLINK. In the example above, 27 SNPs pass 5×10⁻⁸ and form 4 loci, on chromosomes 2, 6, 11 and 16.

The number of variants and samples, the test or model and its covariates, what the two lines mark (genome-wide significance at 5×10⁻⁸ and the suggestive level at 1×10⁻⁵), the genome build, and the genomic inflation factor λ from the QQ plot. Label lead SNPs by rsID or nearest gene, and say how independent loci were defined.

Pro and Credit Pack users export editable SVG and 300 DPI PDF; free exports are watermarked PNG. With hundreds of thousands of points, ask for the point layer to be rasterized so the PDF stays small while the axes and labels stay vector. If the journal asks for TIFF, export a PNG and convert it with the free FigCanvas PNG to TIFF converter.

In R, qqman is the simplest (manhattan() and qq()), and CMplot draws circular and multi-trait versions; in Python, GWASLab or matplotlib. FUMA, a free web platform, draws Manhattan and QQ plots as part of annotating uploaded summary statistics, and LocusZoom draws regional plots of a single locus. FigCanvas makes a Manhattan plot and QQ plot from a CSV of chromosome, position and P value, with significance lines and labeled lead SNPs, without code.

Excel is impractical: a sheet holds at most 1,048,576 rows, fewer than a typical imputed GWAS, and has no genomic axis. In Python, read the file with pandas, add each chromosome’s cumulative length to the positions, compute −log10(P), and scatter by chromosome in matplotlib with axhline at 7.3 and 5; λ is np.median(scipy.stats.chi2.isf(p, 1)) / 0.4549. Without code, upload the file to the FigCanvas Manhattan plot generator.

§ Start

Make a Manhattan plot from your GWAS results

Upload summary statistics, get the Manhattan plot with significance lines and labeled loci plus a QQ plot with λ, then export it for your paper.

Free daily creditsEditable SVG exportPublication-ready output
Try the Manhattan plot generator— it's free