Manhattan Plot in Matplotlib — Complete Guide
You will learn how to create a publication-quality Manhattan plot for GWAS results using Matplotlib.
The Problem
Vizualizarea asocierilor dintre markeri genetici si trasaturi fenotipice necesita un grafic care sa evidentieze varfurile semnificative pe intreg genomul. Un Manhattan plot prost construit ascunde semnalul real.
The Wrong Way
Trasarea punctelor fara alternarea culorilor pe cromozomi si fara linia de semnificatie:
import matplotlib.pyplot as plt
import numpy as np
chromosomes = np.repeat(range(1, 23), 100)
positions = np.tile(range(100), 22)
p_values = -np.log10(np.random.uniform(0, 1, 2200))
plt.scatter(range(2200), p_values, c='blue', s=5)
plt.show()
Ce se intampla: Graful este greu de citit, cromozomii nu se disting, iar pragul de semnificatie lipseste.
The Right Way
Alternarea culorilor pe cromozomi si adaugarea liniei de semnificatie genomica:
chromosomes = np.repeat(range(1, 23), 100)
positions = np.tile(range(100), 22)
p_values = -np.log10(np.random.uniform(0, 1, 2200))
colors = ['#1f77b4' if c % 2 else '#ff7f0e' for c in chromosomes]
x_pos = np.arange(len(p_values))
plt.figure(figsize=(14, 5))
plt.scatter(x_pos, p_values, c=colors, s=8, alpha=0.7)
plt.axhline(-np.log10(5e-8), color='red', linestyle='--', linewidth=1,
label='Genome-wide significance (5e-8)')
chrom_ticks = [np.mean(np.where(chromosomes == c)[0])
for c in range(1, 23)]
plt.xticks(chrom_ticks, range(1, 23), fontsize=8)
plt.xlabel('Chromosome'), plt.ylabel('-log10(p-value)')
plt.title('Manhattan Plot - GWAS Results')
plt.legend()
plt.tight_layout()
plt.show()
Rezultat asteptat: Un grafic clar, cu cromozomi alternati cromatic, axa X etichetata corect si pragul de semnificatie vizibil.
Step-by-Step Fix
1. Pregateste datele
Asigura-te ca datele contin cromozom, pozitie si p-value pentru fiecare marker.
2. Calculeaza pozitiile pe axa X
cumulative_pos = []
for chrom in range(1, 23):
chrom_data = data[data['chrom'] == chrom]
cumulative_pos.extend(chrom_data['pos'].values +
(cumulative_pos[-1] if cumulative_pos else 0))
3. Adauga liniile de semnificatie
plt.axhline(-np.log10(5e-8), color='red', ls='--', lw=1)
plt.axhline(-np.log10(1e-5), color='blue', ls=':', lw=1,
alpha=0.5, label='Suggestive (1e-5)')
Prevention Tips
- Alternarea culorilor intre cromozomi pentru lizibilitate maxima
- Adauga intotdeauna linia de semnificatie genomica la 5e-8
- Eticheteaza axa X cu numerele cromozomilor, nu cu pozitii brute
- Foloseste transparenta (alpha=0.7) pentru puncte suprapuse
- Pastreaza raportul de aspect care evidentiaza varfurile semnificative
Common Mistakes
- Nu alterneaza culorile -- cromozomii sunt greu de distins
- Omite linia de semnificatie -- nu se vede ce asocieri sunt semnificative
- Eticheteaza gresit axa X -- cu pozitii brute in loc de numere de cromozomi
- Foloseste puncte prea mari -- satureaza graficul si ascunde detalii
- Nu ajusteaza layout-ul -- etichetele se suprapun si graficul devine ilizibil
Practice Exercise
Creaza un Manhattan plot pentru un set GWAS real (100k markeri, 22 cromozomi). Evidentiaza top 5 asocieri cu o culoare diferita.
FAQ
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with Python Data Science workflows for enhanced productivity and security.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro