ZOMBI2 · examples

Examples gallery

Species trees

5

Forward birth–death trees — the whole history, survivors and extinctions, with the diversification model made visible.

Yule tree

Yule tree

Pure birth, no extinction — a forward tree of 100 lineages.

pure birth (Yule)
Extinct lineages

Extinct lineages

The full history behind 100 survivors — their branches solid, extinct lineages dashed.

birth–death
Mass extinction

Mass extinction

A pulse at t = 3 culls 75% of lineages — the skyline drops sharply at the dashed line, then recovers.

mass extinction · + skyline
Rate shifts

Rate shifts

Speciation runs slow, then fast, then slow — the burst packs branches between the two dashed regime lines.

time-varying birth
Diversity-dependent

Diversity-dependent

Speciation slows as diversity fills up; the skyline rises and plateaus at the cap of 100.

birth–death · + skyline

Genomes

7

Genes on chromosomes — a genome as a ring, synteny between genomes, and gene-family events and copy number read against the species tree.

Circular genome (ordered)

Circular genome (ordered)

A genome as a ring — genes evenly spaced by rank, coloured by family, arrows by strand. plot(g, layout="circular") + genes().

phylustrator · circular
Synteny between two genomes

Synteny between two genomes

Two genomes, one per row; ribbons link same-family genes and cross where the order was rearranged. stack([a,b]) + synteny().

phylustrator · synteny
Gene-family events on the tree

Gene-family events on the tree

One family's history on the species tree: duplications (squares), losses (crosses) and transfers (arrows, donor→recipient). plot(tree) + branch_events(…).

phylustrator · events
Profile copy-number

Profile copy-number

A family × genome copy-number heatmap, its rows locked to the tips. beside(tree, heatmap(profiles)).

phylustrator
Real genome (Mycoplasma)

Real genome (Mycoplasma)

A real bacterium — Mycoplasma genitalium, 546 genes at their true base positions, coloured by strand; the forward/reverse switch marks the replication origin. read_gff(…).

phylustrator · real GFF
An inversion, before → after

An inversion, before → after

One inversion on a circular genome: the affected segment is reversed and its strands flip (the arrows turn round). The band marks the segment in both rings. highlight(g, start, end) + genes().

phylustrator · circular
A transfer highway between clades

A transfer highway between clades

Transfers steered to run between two clades (a Clades + Between kernel — topology, not a trait). Tree coloured by clade; the barplot counts transfers by clade pair, so A↔B towers over within-clade.

clades · transfer_to

Sequences

4

The dated tree the sequences evolve down, and an alignment lined up row-for-row with its tips.

Sequence phylogram

Sequence phylogram

The clock tree the sequences evolve down — branch lengths are substitutions/site under an uncorrelated relaxed clock, so the tips are not level.

phylustrator · phylogram
Autocorrelated-clock phylogram

Autocorrelated-clock phylogram

The other clock we ship: under the autocorrelated clock the rate drifts parent→child, so related lineages share a rate — branches coloured by lineage rate move in blocks, not salt-and-pepper. substitution = FromParent(spread).

phylustrator · phylogram
Ancestral sequences at the nodes

Ancestral sequences at the nodes

A small tree with its internal nodes numbered (0 = initial genome, 1 = crown, …); beside it the reconstructed sequence at each — one free-floating row per node, not aligned to the tips. seqs.ancestral.

phylustrator · ancestral
Alignment beside the tree

Alignment beside the tree

A single-copy family across 20 species, residues coloured (with a nucleotide key), each row locked to its tip. beside(tree, alignment(aln)).

phylustrator

Trait evolution

5

A trait evolving down the tree — branches coloured by its value; some paired with a companion panel.

Brownian motion

Brownian motion

Free diffusion — sister lineages drift apart with time.

continuous
Ornstein–Uhlenbeck

Ornstein–Uhlenbeck

Pulled to an optimum: a high start (yellow) converges to blue.

continuous
Discrete states

Discrete states

A two-state trait hops between habitats; each branch is painted by its state history.

discrete · Mk
Dependent continuous traits

Dependent continuous traits

Two traits evolve together (r = 0.9) — two trees, coloured by each trait, and the tip scatter.

continuous · + scatter
Dependent discrete traits

Dependent discrete traits

Two binary characters where one's flip rate depends on the other's state. Two trees, coloured by each character (X green, Y purple), so you can see Y is present where X is; the 2×2 chain (arrow width = rate) is the model. simulate_discrete(states=("00",…), switch={…}).

discrete · dependent

Joining and conditioning

6

One level drives another through one mechanism: a trait drives diversification so its state shapes the tree, or a trait conditions the genome — driving gene loss — so its state shapes genome size.

BiSSE

BiSSE

A two-state trait drives speciation — the fast state's clades take over; the inset is the state Markov chain.

trait → speciation
State-dependent extinction

State-dependent extinction

One state dies far faster; the doomed lineages (dashed) drop out.

trait → extinction
MuSSE

MuSSE

Three graded speciation rates with constant death — the fastest state fills the tree, extinct lineages dashed.

trait → speciation
Genome reduction

Genome reduction

The same coupling, aimed at the genome instead of the tree: an irreversible endosymbiont lifestyle drives fast gene loss and near-zero gene gain, so those lineages' genomes collapse. Tree coloured by lifestyle; bars are per-tip genome size.

trait → loss
Genome expansion

Genome expansion

The mirror image: a trait conditions the duplication rate, so under relaxed selection duplicates pile up and those genomes grow. Same figure as reduction, run the other way. duplication = base * DrivenBy(sel, {…}).

trait → duplication
HGT uptake by competence

HGT uptake by competence

A trait conditions who receives a transfer, not a rate — competent lineages take up DNA more readily and their genomes swell. The trait-driven twin of the topological clade highway. transfer_to = DrivenBy(competence, {…}).

trait → transfer uptake