Quick answer: IGV (Integrative Genomics Viewer) is a desktop genome browser that plots your own data — sorted, indexed BAMs, VCFs, and annotation tracks — against a reference so you can see what statistics only summarize. Loading is three steps: pick a reference genome, load your indexed BAM and VCF, and navigate to a locus. The reading skill is knowing what to look for in a pileup: coverage shape, allele fraction in the reads, mapping and strand artifacts, and whether a called variant’s evidence looks like biology or like library noise.
The complement to every alignment and variant pipeline on this blog: read mapping produces the BAM and variant calling produces the VCF — IGV is where you adjudicate both with your own eyes.
Table of Contents
Why visual inspection is a QC step, not a luxury
Every pipeline reports numbers: depth, mapping quality, allele fraction, FILTER status. None of them tells you what the underlying evidence looks like, and plenty of real-world problems are visible only there:
- A heterozygous variant supported exclusively by reads on one strand (strand bias — a textbook artifact signature).
- Coverage that drops to zero exactly at a deletion — or at a region no aligner can place (a repeat masquerading as a deletion).
- “Soft-clip walls” at a position, the classic signature of a structural variant or an untrimmed adapter.
- Duplicates stacked at identical coordinates inflating a beautiful-looking allele fraction.
Reviewing representative loci in IGV is the standard last gate before believing a pipeline, and it is how most people actually learn what mapping quality, CIGAR operations, and variant allele fraction mean — by seeing them fail.
Setting up: the three things IGV needs
- A reference genome. Genome → Load Genome from Server (GRCh38, GRCm39, etc.), or load a
.2bit/FASTA for a custom assembly. The build must match your BAMs’ coordinates — the most common beginner error is loading hg19 data against hg38 and concluding everything is scrambled. - An aligned, sorted, indexed BAM. File → Load from File. The
.baiindex must sit next to the BAM; without it IGV cannot seek. For RNA-seq, a splice-aware aligner’s BAM so junctions render as split reads. - Variants and annotations (optional but usual). Load your VCF (indexed with tabix for large files) to see calls overlaid on the reads, plus gene annotation tracks from the server (RefSeq, GENCODE) so you know which exon you are looking at.
Large remote files work over HTTP (https://.../sample.bam) — IGV downloads only the region in view, which is why indexing matters more than file size.
Reading a pileup: what each visual element encodes
At a typical zoomed-in locus you get four layers of information:
- Coverage track (top). A bar per reference position with read depth; bars are colored by base composition. A sharp dip with a colored overlay at the bottom often means a deletion or a mapping hole; a clean, balanced plateau is what a confident region looks like.
- Reads (middle). Each row is one read, aligned to the reference. By default mismatches are colored, so a variant appears as a vertical stripe of consistent color across many reads.
- The variant’s visual signature. A real heterozygous variant: stripe color covering roughly half the reads, present on both forward and reverse strands, spread across different read start positions. An artifact: the stripe sits only in reads starting at the same position (duplicates), only one strand, only at read ends, or only where MAPQ is poor.
- Mate/junction layer. Paired-end links arc to the mate’s position (odd arcs = possible structural variant); RNA-seq reads split across a junction draw as a thin line spanning the intron.
Useful display toggles: color by insert size or mate strand to spot pairing anomalies; sort reads by base, strand, mapping quality, or insert size at a locus — sorting by base at a candidate variant instantly reveals whether both strands and mixed start positions support it; and shade mismatched bases off when the view gets noisy.
A worked inspection: five minutes on one variant
Suppose a caller reports a variant at chr7:140,453,130 with VAF 0.35. The disciplined look:
- Jump to the locus (
Ctrl+G), zoom to single-base level with the VCF and BAM loaded. - Check the allele fraction visually — do roughly a third of reads carry the alt color, or is it three reads in a sea of reference?
- Sort by base, then by strand — both strands and many distinct read starts should support it.
- Check the reads’ MAPQ — highlight or sort by mapping quality; a variant made of MAPQ-0 reads in a paralog is fiction.
- Look left and right — position bias (all supporting reads overlapping the same cycle) and soft-clip patterns at the locus explain most false calls.
- Compare the normal (if loaded) — the matched normal should show reference-only reads at a somatic site.
If all six pass, you trust the call far more than the FILTER column alone warrants. If one fails, you have found the exact mechanical reason the call is wrong.
Workflows that scale beyond clicking around
- Sessions. File → Save Session stores loaded tracks and view settings; commit the
.sessionfile so a collaborator — or your thesis committee — sees the same view. - Batch scripts and sessions for reproducibility. IGV accepts a batch file of commands (
goto,load,snapshot), which turns “review these 300 loci” into a script and produces identical screenshots across runs. igvtoolsfor precomputing coverage/frequency tracks (.tdf), sorting unindexed files, and counting alignments — useful when a BAM is too heavy to render naively.- RNA-seq specifics. Enable junction views, check that split reads span annotated introns, and watch for unspliced-mapping artifacts in lowly expressed genes.
- Multi-sample comparison. Loading tumor and normal (or case and control) BAMs stacked lets you compare evidence at the same coordinates — the visual analog of the paired analysis.
Keep the reference build, session file, and the screenshots used in a report together; a figure with no recorded locus and genome build is not reproducible.
Common mistakes to avoid
- Reading the reference as data. The gray reference letters are the assembly, not your sample; only colored mismatches in reads are your evidence.
- Trusting a single zoomed read. Always widen the view to tens of reads before judging support — visual allele fractions at 6× are noise.
- Forgetting the index or the build. Half of all “IGV is broken” reports are a missing
.baior mismatched genome build. - Screenshotting without context. A capture without locus, build, and track labels proves nothing to anyone else.
- Using IGV as a caller. It adjudicates and diagnoses; it does not replace a caller’s models or the need for validated thresholds.
Key takeaways
- IGV renders your indexed BAM/VCF against a reference so mapping and variant evidence becomes visible rather than statistical.
- Reference build and BAM index are the two setup details that cause most failures.
- A credible variant shows balanced strands, mixed read starts, decent MAPQ, and consistent allele fraction; artifacts show position, strand, or mapping-quality bias.
- Sorting reads at a locus (base, strand, MAPQ, insert size) is the fastest diagnostic move in the tool.
- Sessions and batch scripts make visual review reproducible; screenshots need locus, build, and track labels to mean anything.
- Visual inspection complements — never replaces — callers and QC metrics.
Challenge
Open any public BAM+VCF pair in IGV (IGV’s own tutorials host demo data, as do ENCODE and the 1000 Genomes portals). Find one variant IGV makes you distrust: sort the reads, note whether strand, read position, or mapping quality condemns it, and compare that with the VCF’s FILTER value. Then find one it makes you trust completely and write the six-line visual justification. That comparison — evidence versus label — is the entire skill.
Want a guided walk-through of IGV on your own data? Ampersand Academy offers one-to-one mentoring in bioinformatics — part of Mahadhi, a development and digital marketing company.
FAQ
What file formats does IGV load?
Aligned indexed BAM/CRAM and their indexes, VCF (optionally tabix-indexed), BigWig/TDF coverage, BED/GFF/GTF annotations, and plain text tables of coordinates. The BAM must be coordinate-sorted with an adjacent .bai or .csi file, otherwise IGV cannot seek to regions.
Why does IGV show nothing when I load my BAM?
Usually one of three causes: no index file next to the BAM, coordinates outside the loaded reference, or a genome-build mismatch (hg19 data against a hg38 reference). Check the locus reference letters first — if they look like random sequence, the build is wrong.
How do I decide if a variant in IGV is real?
Look for consistent alternate bases across many reads, support on both strands, a mix of read start positions, decent mapping quality, and no read-position bias. Support confined to duplicates, one strand, or read ends is an artifact signature regardless of how the caller labeled it.
What does a thin line across a gap in a read mean in RNA-seq IGV?
That read is split — it aligned in two segments with an unaligned stretch between, which for RNA-seq means an exon–exon junction. Junction-spanning reads are the splice evidence; clusters of reads split at the same coordinates indicate an expressed intron.
Can IGV handle very large BAM files over HTTP?
Yes — IGV fetches only the region in view, so file size matters far less than having an index served alongside the BAM (the index must be reachable over the same URL). Local copies remain faster for heavy, repeated navigation.
How do I make my IGV review reproducible?
Save the session (tracks, positions, display settings) as a file, use batch files for scripted navigation and snapshots, and record the genome build, locus, and track identities with every exported image. A shared session plus a batch script lets anyone re-derive exactly what you saw.
Is IGV only for humans?
No. Any reference with a FASTA or 2bit — bacteria, plants, animals, custom assemblies — can be loaded; annotation tracks can be loaded from GFF/GTF files when no server track exists. Custom assemblies are common in microbial and non-model organism work.

