Written and maintained by CASRAI Editorial Board
Last updated
A Manhattan plot is a scatter plot of genome-wide association study (GWAS) results. Each dot is one genetic variant (usually a SNP), placed left to right by its position along the chromosomes and up the page by the strength of its association with a trait, shown as the negative base-10 logarithm of its p-value. Variants with the smallest p-values therefore appear as the tallest dots, and clusters of tall dots look like skyscrapers over a flat skyline.
What does each dot on a Manhattan plot represent?
Each dot represents a single variant tested for association with the phenotype. Its horizontal position is its chromosomal location (chromosomes are laid end to end, usually in alternating colours), and its height is −log10(p). A tall dot means a small p-value, that is, stronger statistical evidence of association between that variant and the trait. In the R package qqman, the plotting function documents that the −log10 of the p-value is what is plotted by default, and that SNPs below a chosen p-value can be annotated with labels (qqman manual, CRAN).
Neighbouring variants are correlated through linkage disequilibrium, so one true signal usually produces a tower of several tall dots rather than a single spike.
What is the p-value in GWAS?
In a GWAS, the p-value for a variant is the probability of seeing an association at least as strong as the one observed if that variant had no true association with the trait. One such test is run per variant, so a study can run hundreds of thousands to millions of tests. See the p-value definition for the general concept, and genome-wide significance thresholds for why a single-test cut-off of 0.05 is not used.
The formula: why plot −log10(p)?
The plotted height is:
y = −log10(p)
- p: the association p-value for one variant (between 0 and 1).
- log10: the base-10 logarithm, so each increase of 1 on the y-axis is a tenfold smaller p-value.
- The minus sign: p-values below 1 have negative logarithms; the sign flip makes smaller p-values plot higher.
FinnGen’s documentation describes the same layout: chromosomal positions on the x-axis, −log10(p) on the y-axis, with the smallest p-values at the highest points.
Worked example: converting p-values to heights
| p-value | Arithmetic | Height on the plot |
|---|---|---|
| 0.05 | −log10(0.05) = −(−1.301) | 1.30 |
| 1 × 10-5 | −(−5) | 5.00 |
| 5 × 10-8 | 8 − log10(5) = 8 − 0.699 | 7.30 |
| 2 × 10-9 | 9 − log10(2) = 9 − 0.301 | 8.70 |
The conventional genome-wide line sits at 5 × 10-8, which is a Bonferroni-style correction: 0.05 divided by roughly one million independent tests is 0.05 / 1,000,000 = 5 × 10-8, and −log10(5 × 10-8) = 7.30. The qqman manhattan() defaults draw two lines: a “suggestive” line at −log10(1e-05) (height 5) and a genome-wide line at −log10(5e-08) (height 7.30). The reasoning behind both thresholds is covered in Genome-Wide Significance Thresholds in GWAS; the general correction is explained in Bonferroni correction and multiple comparisons.
In the example, a variant at p = 2 × 10-9 (height 8.70) clears the genome-wide line; a variant at p = 3 × 10-6 (height 5.52) clears only the suggestive line.
How to read a Manhattan plot
| What you see | What it usually indicates |
|---|---|
| A tower of several dots above the genome-wide line at one locus | A candidate association region; nearby variants are correlated through linkage disequilibrium, so they rise together. |
| A single isolated dot far above its neighbours | Worth checking for genotyping or quality-control problems before interpreting it as a real signal, because a true signal normally brings correlated neighbours with it. |
| Dots between the suggestive and genome-wide lines | Suggestive evidence only; the GWAS Catalog uses p < 1 × 10-5 as an inclusion threshold and states it is not intended to define genome-wide significance. |
| Nothing above the lines | No variant reached significance at this sample size; the plot does not show that no associations exist. |
| The whole skyline lifted, not just a few peaks | Possible inflation (for example from population structure); check the Q-Q plot and lambda. |
The companion Q-Q plot and lambda
Manhattan plots are normally read alongside a quantile-quantile (Q-Q) plot of the same p-values. FinnGen’s documentation explains that deviation of the Q-Q points from the diagonal indicates associated loci, points above the line indicate inflation and points below it deflation. The genomic inflation factor lambda is the median observed chi-square statistic (1 degree of freedom) divided by its expected value of about 0.456 (0.455 in some sources); FinnGen advises a lambda above 1.0 and below roughly 1.5. In qqman, qq() draws the Q-Q plot. For controlling false discoveries across many tests more broadly, see q-values and false discovery rate.
Assumptions and common mistakes
- Plotting raw p-values. The plot is meaningless without the −log10 transform (qqman’s
logpargument controls it and defaults to TRUE). - Treating 5 × 10-8 as universal. It is a convention tied to roughly one million independent common-variant tests; designs with other numbers of effective tests may justify other thresholds.
- Reading height as effect size. Height shows statistical evidence, which depends on sample size and allele frequency; it does not show how large the effect is.
- Treating the tallest dot as the causal variant. Correlated neighbours share the signal; fine-mapping is a separate step.
- Chromosome order and labelling. Chromosomes must be coded numerically and sorted for the x-axis to be meaningful; qqman’s
chrlabsargument sets custom labels such as X and Y. - Confusing it with other genome figures. See the FAQ below.
How to report a Manhattan plot
State the trait, sample size, test and covariates, the threshold drawn (and why), the number of variants tested, and lambda. An example sentence in APA style for the results text:
Association results are shown in Figure 1. Variants were tested for association with the trait under an additive model; the genome-wide significance threshold was p < 5 × 10-8 and the suggestive threshold p < 1 × 10-5. The genomic inflation factor was λ = 1.03.
The lambda value in this sentence is a placeholder to show format, not a result. Figure captions should say what each axis shows and what the horizontal lines mean. For general reporting conventions for p-values, see how to report p-values.
How to make a Manhattan plot in R, Python or Excel
R (qqman)
install.packages("qqman")library(qqman)manhattan(gwasResults) # built-in example dataqq(gwasResults$P) # companion Q-Q plot
Input needs columns for chromosome (CHR), base-pair position (BP), SNP name (SNP) and p-value (P). Defaults draw the suggestive and genome-wide lines described above.
Python (matplotlib)
import numpy as npimport matplotlib.pyplot as plt# df has columns: chr (int), pos (int), p (float)df = df.sort_values(["chr", "pos"]).reset_index(drop=True)df["y"] = -np.log10(df["p"])colors = ["#1f4e79", "#7f7f7f"]for i, (chrom, g) in enumerate(df.groupby("chr")): plt.scatter(g.index, g["y"], s=4, color=colors[i % 2])plt.axhline(-np.log10(5e-8), color="red")plt.axhline(-np.log10(1e-5), color="blue", linestyle="--")plt.xlabel("Chromosome (variants in genomic order)")plt.ylabel("-log10(p)")plt.show()
Excel
Excel has no built-in Manhattan chart. Sort rows by chromosome then position, add a column with =-LOG10(C2) (where C holds the p-value), and insert a scatter chart of row number against that column. Add the threshold lines as extra series at 7.30 and 5.
Frequently asked questions
What does a circo plot show?
A circos (circular) plot arranges chromosomes around a circle and draws tracks or links between positions, so it can display many layers of genome data at once. It is a different figure from a Manhattan plot, which is a linear scatter plot of association strength; some papers show Manhattan results as a circular track, but the y-axis is still −log10(p).
What is a chromosome map called?
A picture of chromosomes with features marked along them is commonly called an ideogram. The GWAS Catalog’s Diagram is of this kind: each coloured circle marks a trait association on the chromosome map. The GWAS Catalog FAQ states that it does not currently provide Manhattan plots; it offers locus-level views such as LocusZoom and linkage disequilibrium plots instead.
Is a Manhattan plot the same as a Q-Q plot?
No. The Manhattan plot shows where in the genome associations occur; the Q-Q plot compares the distribution of all observed p-values with the distribution expected under no association, and is used to detect inflation.
What does a Manhattan plot of SNPs look like?
A band of dots across the chromosomes, mostly low, with occasional towers where a locus is associated with the trait. A plot with no towers above the genome-wide line is a valid result.
Sources
- qqman: Q-Q and Manhattan Plots for GWAS Data, CRAN reference manual and README (https://cran.r-project.org/web/packages/qqman/qqman.pdf), read 2026-11-07.
- NHGRI-EBI GWAS Catalog, Frequently Asked Questions (https://www.ebi.ac.uk/gwas/docs/faq), read 2026-11-07.
- FinnGen documentation, What are QQ and Manhattan plots (https://docs.finngen.fi/faq/about-pheweb/what-are-qq-and-manhattan-plots), read 2026-11-07.







