# Gallery
The showcase and the system test in one artifact, read as a ladder —
from the first plot to composition and style. This whole file is
generated from the examples (unlike README.md, which splices marked
blocks); regenerate with `cargo run --example regen_docs` — CI fails when
it is stale. Every example renders a fixed deterministic frame, so output
is deterministic.
## First look
One call, and there's a chart. These are the shapes a first plot takes.
### sine
Function sampling: curves drawn from `f(x)`, one sample per subpixel column.
Source: [examples/sine.rs](examples/sine.rs)
```text
sin(x) and 0.6 cos(x/2)
1.0 ┤ ⢀⠔⠊⠉⠑⢄ ⢀⠔⠉⠉⠒⢄
│ ⡠⠃ ⠑⢄ ⡔⠁ ⠣⡀
│⠤⠤⢄⣰⡁ ⠈⢆ ⢀⠜ ⠘⡄ ⢀⣀⡠⠤⠤
0.5 ┤ ⢰⠁⠈⠉⠒⠢⣄ ⠘⡄ ⡸ ⢸ ⣠⠔⠒⠉⠁
│ ⢀⠎ ⠉⠒⢄⡀ ⠸⡀ ⡰⠁ ⢣ ⢀⠤⠒⠉
│⢀⠎ ⠈⠱⢄⠱⡀ ⢠⠃ ⢣ ⢀⡠⠊⠁
0.0 ┤⠎ ⠉⢳⢄ ⢠⠃ ⢀⡨⢖⠁ ⡰
│ ⢣⠉⠦⡀ ⢠⠃ ⣀⠔⠁ ⠈⢆ ⡰⠁
│ ⢣ ⠈⠑⠢⣀ ⢀⠎ ⢀⡠⠔⠊ ⠈⢆ ⡰⠁
-0.5 ┤ ⡇ ⠙⠒⠤⣀⡀ ⡎ ⣀⡠⠤⠒⠁ ⠈⡆ ⡇
│ ⠘⡄ ⠈⡹⠑⠒⠒⠒⠒⠉⠉ ⠱⡀ ⢀⠎
│ ⠈⢆ ⢀⠜ ⠑⡄ ⡠⠊
-1.0 ┤ ⠑⠤⣀⡠⠔⠁ ⠈⠢⢄⣀⡠⠊
└┬─────────┬──────────┬─────────┬─────────┬──────────┬─────────┬───
0 2 4 6 8 10 12
```
### languages
Categorical bars from a zero baseline, with eighth-block precision at the top.
Source: [examples/languages.rs](examples/languages.rs)
```text
admired languages, % (synthetic)
│ ████████
60 ┤ ████████ ███████
│ ████████ ▇▇▇▇▇▇▇ ███████
│ ████████ ███████ ███████
40 ┤ ████████ ▅▅▅▅▅▅▅▅ ███████ ███████
│ ████████ ████████ ███████ ███████
│ ████████ ████████ ███████ ███████
20 ┤ ████████ ████████ ███████ ███████
│ ████████ ████████ ███████ ███████
│ ████████ ████████ ███████ ███████ ███████
0 ┤ ████████ ████████ ███████ ███████ ███████
└────────────────────────────────────────────────────
rust go python typescri… zig
```
### distribution
Penguin body mass through automatic binning: a real, lumpy distribution.
Source: [examples/distribution.rs](examples/distribution.rs)
```text
penguin body mass
100 ┤ ▁▁▁▁▁▁▁
│ ███████
75 ┤ ███████
│ ▃▃▃▃▃▃▃▃███████
│ ███████████████▂▂▂▂▂▂▂
50 ┤ ██████████████████████████████
│ ██████████████████████████████
│ ██████████████████████████████▅▅▅▅▅▅▅
25 ┤ █████████████████████████████████████▇▇▇▇▇▇▇
│▂▂▂▂▂▂▂████████████████████████████████████████████
0 ┤███████████████████████████████████████████████████▂▂▂▂▂▂▂▂
└┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬
2500 3000 3500 4000 4500 5000 5500 6000 6500
grams
```
### annotated
Annotations: a Rule for the target line, a Rule span washing the warm-up phase behind the data, a Text note at data coordinates.
Source: [examples/annotated.rs](examples/annotated.rs)
```text
annotated loss (synthetic)
░░ warm-up ── loss ── target
│⢕⢕⢕⢕⢕⢕⢕⢕⠅
4 ┤⢕⢝⢷⣕⢕⢕⢕⢕⠅
│⢕⢕⢕⢕⢷⣕⢕⢕⠅
3 ┤⢕⢕⢕⢕⢕⢝⢷⣕⠅
│⢕⢕⢕⢕⢕⢕⢕⢕⠕⠢⣀
2 ┤⢕⢕⢕⢕⢕⢕⢕⢕⠅ ⠉⠢⢄⣀ < converging
│⢕⢕⢕⢕⢕⢕⢕⢕⠅ ⠉⠒⠢⢄⣀
1 ┤⢕⢕⢕⢕⢕⢕⢕⢕⠅ ⠉⠉⠑⠒⠤⠤⢄⣀⣀⡀
│⣕⣕⣕⣕⣕⣕⣕⣕⣅⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣈⣉⣉⣉⣑⣒⣒⣒⣒⣒⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⣀⣀⣀⣀⣀⣀
0 ┤⢕⢕⢕⢕⢕⢕⢕⢕⠅
└┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬
0 10 20 30 40 50 60 70
```
### describe
The first look is sometimes a table: the box plot's flippers as their five-number summary — a stat table from text on band scales, every column formatted like a tiny axis and aligned at the decimal point — with each distribution's shape as an inline histogram column.
Source: [examples/describe.rs](examples/describe.rs)
```text
flipper length by species (mm)
Adelie ┤ 151 190.0 6.539 172 186 190 195 210 ▁▃▆██▅▁▁
Chinstrap ┤ 68 195.8 7.132 178 191 196 201 212 ▂▁▅▅█▅▂▂
Gentoo ┤ 123 217.2 6.485 203 212 216 221 231 ▁▄███▄▃▅
└─────────────────────────────────────────────────────────────────────────────────────
count mean sd min p25 p50 p75 max hist
```
## Distributions
Where the statistics layer earns its keep: real estimators, lumps and all.
### boxes
Box plots: type-7 quartiles, Tukey whiskers, outliers — one Range mark with body and marker channels per category.
Source: [examples/boxes.rs](examples/boxes.rs)
```text
flipper length by species
230 ┤ ▀▀▜▀▀
│ ▐
220 ┤ ███████▌
│ ━━━━━━━━
210 ┤ ▄▄▄▄▄ ▀▀▜▀▀ ▀▀▀▜▀▀▀▘
m │ ▌ ▐ ▄▄▟▄▄
m 200 ┤ ▌ ▐███████▌
│ ▗▄▄▄▙▄▄▄ ▐━━━━━━━━
190 ┤ ━━━━━━━━━ ▝▀▀▀▜▀▀▀▘
│ ▝▀▀▀▛▀▀▀ ▐
180 ┤ ▌ ▐
│ ▄▄▙▄▄ ▀▀▀▀▀
170 ┤ ▘
└─────────────────────────────────────────────────────
Adelie Chinstrap Gentoo
```
### violins
The same flippers as mirrored kernel densities — separation as a shape, not a summary.
Source: [examples/violins.rs](examples/violins.rs)
```text
flipper length by species, as densities
240 ┤ ⢠
230 ┤ ⢀⣴⣿⣷⣄
│ ⢀⣼⣿⣿⣿⣿⣀
220 ┤ ⣤ ⣠⣶⣿⣿⣿⣿⣿⣿⣿⣷⣄
│ ⡇ ⢠⣿⡄ ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇
m 210 ┤ ⣿ ⢀⣿⣿⣿⡀ ⠛⠿⣿⣿⣿⣿⣿⠿⠟⠁
m 200 ┤ ⢀⣼⣿⣆ ⢀⣠⣶⣿⣿⣿⣿⣿⣶⣄⡀ ⠈⢿⠋
│ ⣠⣾⣿⣿⣿⣿⣿⣦⣄ ⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆ ⠸
190 ┤ ⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠄ ⠙⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋
│ ⠙⠿⣿⣿⣿⣿⣿⣿⣿⠟⠁ ⠉⠻⣿⣿⣿⠟⠉
180 ┤ ⠈⠻⣿⣿⡿⠛ ⠸⣿⠇
│ ⠘⣿⠁ ⣿
170 ┤ ⡇ ⠉
└─────────────────────────────────────────────────────
Adelie Chinstrap Gentoo
```
### raincloud
A raincloud from the grammar, no preset: a half-violin cloud, a Range box, and every measurement as jittered rain — stat::jitter's van der Corput strip fills evenly and renders the same every time.
Source: [examples/raincloud.rs](examples/raincloud.rs)
```text
flipper length by species: cloud, box, and rain
240 ┤ ⡄
│ ⣷⡀
230 ┤ ⢐⡤ ⠐⠒⠒⡖⠒⣿⣿⣆
│ ⢨⣁⡁ ⡇ ⣿⣿⣿
│ ⢐⢭⣧⣄⣄⣀⣇⣀⣿⣿⣿⣷⣤
220 ┤ ⡇ ⢐⢏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄
│ ⡇ ⣿⡀ ⠐⠓━━━━━━━━━⣿⣿⣿⡿
210 ┤ ⠄ ⣿ ⠈ ⠤⠌⠉⠉⡏⠉⣿⣧ ⢀⠈⣯⡽⠍⠉⡏⠉⣿⣿⣿⣿⣿⠟⠁
m │ ⢈⠉⠉⡏⠉⣿ ⢐ ⡀⠄ ⡇ ⣿⣿⣆ ⠈ ⠘⠉ ⡇ ⣿⣿⠟⠛⠁
m │ ⠠⠐⢠ ⡇ ⣿⣆ ⢀⡐⣆⣠⣀⣀⣇⣀⣿⣿⣿⣷⣄ ⠒⠒⠒⠓⠒⣿⠁
200 ┤ ⠐⢼⡃ ⡇ ⣿⣿⣷⣄ ⢀⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄ ⡇
│ ⢘⡒⣾⣿⣶⣶⣷⣶⣿⣿⣿⣿⣷⣄ ⢀⢯━━━━━━━━━⣿⣿⣿⡿ ⠁
190 ┤ ⢸⡷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ ⡛⠟⠟⠛⡟⠛⣿⣿⣿⣿⣿⠏
│ ⠈⣷━━━━━━━━━⣿⣿⡿⠁ ⠑⠐⡐⠂ ⡇ ⣿⣿⣿⠟⠁
│ ⠨⣜⡎⠉ ⡇ ⣿⣿⣿⡿⠋ ⢀ ⡀ ⡇ ⣿⡿⠁
180 ┤ ⠈⠠⠌⠉⠆ ⡇ ⣿⣿⠏ ⠠⠤⠤⠧⠤⣿⠇
│ ⠌ ⠠⠤⠤⠧⠤⣿⠃ ⡿
170 ┤ ⠂ ⣿ ⡇
│ ⡇
└───────────────────────────────────────────────────────────
Adelie Chinstrap Gentoo
```
### latency
A bounded density: kernels reflected at zero keep a latency distribution's mass where the data lives, beside the unbounded estimate that leaks below it.
Source: [examples/latency.rs](examples/latency.rs)
```text
request latency, density (synthetic)
── unbounded ── bounded at 0
0.15 ┤ ⣥⡀
│ ⠄⠱⡄
│ ⠂⢀⡱⡀
0.10 ┤ ⡁⠊ ⢳
│ ⠴⠁ ⠳⡀
│ ⡆ ⠱⡄
│ ⢠⡁ ⠙⢆
0.05 ┤ ⠘⠄ ⠱⣄
│ ⡇⠂ ⠈⠑⢦⣀
│ ⢰ ⡁ ⠈⠙⠲⠤⣄⣀
0.00 ┤⣀⡤⠁ ⠄ ⠉⠉⠒⠒⠒⠢⠤⠤⠤⠤⠤⠤⢤⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀
└────┬──────────┬──────────┬──────────┬──────────┬──────────┬
0 10 20 30 40 50
ms
```
### cumulative
The same latencies as a cumulative histogram in percent: HistogramOptions rescales the bins and accumulates them, so the share served within a latency reads off the axis and the last bar reaches 100 %.
Source: [examples/cumulative.rs](examples/cumulative.rs)
```text
requests served within a latency (synthetic)
── p95
100% ┤⠄⠠ ⠄⠠ ⠄⠠ ⠄⠠ ⠄⠠ ⠄▁▁▁▃▃▃▄▄▅▅▅▆▆▆▇▇▇▇▇▇▇▇██████████████████████
│ ▂▂▂▆▆████████████████████████████████████████████
│ ▅▅▅█████████████████████████████████████████████████
│ ▅▅▅████████████████████████████████████████████████████
50% ┤ ▃▃███████████████████████████████████████████████████████
│ █████████████████████████████████████████████████████████
│▄▄▄█████████████████████████████████████████████████████████
│████████████████████████████████████████████████████████████
0% ┤████████████████████████████████████████████████████████████
└┬────────────┬─────────────┬────────────┬─────────────┬─────
0 10 20 30 40
ms
```
### ridgeline
A ridgeline of gradient distributions over training - rows rendered back to front at fixed elevation, each a lifted KDE in the corners style so nearer rows overwrite what they cross: the TensorBoard histogram view, and the terminal's honest 3D surface.
Source: [examples/ridgeline.rs](examples/ridgeline.rs)
```text
gradient distribution by epoch
5 ┤ ╭────────────╮
│ ╭─╯ ╰───╮
│ ╭╮ ╭──╯╭─────────────╮ ╰───╮
│ ╭───────╯╭──╯╭─────╮ ╰──╮ ╰────╮
4 ┤ ──────────╯ ╭╯ ╭─╯╭──╯╮ ╰──╮ ╰─╮ ╰────────
│ ╭───╯╭─╯╯──╰────╮ ╰──╮ ╰──╮
│ ╭───────╯│ ╭╭╯─╯╯─╮╰─╮ ╰╮ ╰──╮ ╰────────╮
│ ─────╯ ╭────╯╯╯╰╮ ╰╮ ╰─╮ ╰─╮ ╰─╮ ╰────
3 ┤ ╭───╯ │╭╯╭╯│ ╰╮ ╰╮ ╰╮ ╰──╮ ╰───╮
│ ────────╯ ╭╯╯│ │ │ │ ╰╮ ╰─╮ ╰─────────
│ ╭──╯╭─╯ ╰╮ │ ╰╮ ╰╮ ╰─╮
│ ─────╯ ╭─╯ │ ╰╮ ╰╮ ╰─╮ ╰──────
2 ┤ ╭─╯╯ │ │ ╰╮ ╰╮
│ ──────╯╭╯╯ │ ╰╮ ╰╮ ╰───────
│ ╭╯│ │ │ ╰╮
│ ╭─╯╭╯ ╰╮ │ ╰─╮
1 ┤ ───╯ ╭╯│ │ ╰╮ ╰───
│ ╭╯╭╯ │ ╰─╮
│ ──╯ │ │ ╰───
│ ╭╯ ╰╮
0 ┤ ─╯ ╰──
└┬────────┬───────┬────────┬────────┬───────┬────────┬───────┬
-1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5
```
### qq
A Q–Q plot from the grammar, no preset: matched type-7 quantiles of two samples against the identity line — the heavy tail peels off it.
Source: [examples/qq.rs](examples/qq.rs)
```text
Q–Q: heavy-tailed vs normal-ish
── identity •• quantiles
6 ┤ ⠠ ⡀⠄⠐
h │ ⢀ ⢀ ⠄⠈
e 4 ┤ ⢀⠂ ⡀⠠ ⠂⠈
a │ ⢀⡠ ⡀⠠ ⠂
v │ ⡠⠠⠂⡀⠂⠈
y 2 ┤ ⢀⣀⠴⠉⠂⠈
- │ ⣀⡤⠴⠚⠁
t 0 ┤ ⢀⣀⠔⠚⠉⠁
a │ ⢀⡠⠖⠛⠉
i -2 ┤ ⢀ ⢂⠵⠃
l │ ⡀⠠⠐ ⡁⠄⠊⠁
e │ ⡀⠄⠈ ⠈
d -4 ┤⠂⠈ ⡀⠊
│
-6 ┤ ⠈
└┬──────────┬───────────┬──────────┬───────────┬──────────┬
-4 -2 0 2 4 6
normal-ish quantiles
```
### steps
Step charts: stairs hold values flat between indices — stat::steps changing after, before, or midway between samples — and an ECDF climbs a distribution from zero to one.
Source: [examples/steps.rs](examples/steps.rs)
```text
requests per window latency ecdf
30 ┤ ⢸⠉⠉⠉⢹ 1.00 ┤ ⣀⡤⠞⠉
│ ⢸ ⢸ │ ⢀⣠⠴⠚⠁
25 ┤ ⢸ ⠘⠒⠒⠒⡆ 0.75 ┤ ⣀⣰⠚⠉
│ ⢀⣀⣀⣀⣀⣀⣀⣸ ⡇ │ ⢀⡞⠁
│ ⢸ ⡇ │ ⡴⠋
20 ┤ ⡤⠤⠤⠤⡄ ⢸ ⡇ 0.50 ┤ ⢠⠞⠁
│ ⡇ ⡇ ⢸ ⠉⠉⠉⠉ │ ⣠⠖⠋
15 ┤ ⡇ ⡇ ⢸ 0.25 ┤ ⢀⣠⠴⠋⠁
│⣀⣀⣀⣀⣀⣀⣀⡇ ⠉⠉⠉⠉ │ ⢀⣀⡴⠋
10 ┤ 0.00 ┤ ⡤⠴⠚⠉
└┬──────────┬─────────┬──────────┬ └┬─────────────┬─────────────┬──
0 3 6 9 0 5 10
```
### powerlaw
Log-log axes: power laws render straight, with decade ticks on both axes.
Source: [examples/powerlaw.rs](examples/powerlaw.rs)
```text
power laws on log-log axes
── 0.5 x^1.5 ── 20 sqrt x
│ ⣀⣠⠴⠒⠋
│ ⢀⡠⠤⠒⠋⠁
10⁶ ┤ ⢀⡠⠤⠒⠉⠁
│ ⣀⡠⠔⠊⠉⠁
│ ⣀⠤⠒⠉
10⁴ ┤ ⣀⠤⠔⠊⠉ ⢀⣀⣀⣀⡤⠤⠤⠤⠒
│ ⣀⠤⠔⠊⠉ ⣀⣀⡠⠤⠤⠤⠔⠒⠒⠒⠒⠉⠉⠉⠁
│ ⣀⣤⣔⣊⣉⠤⠤⠤⠔⠒⠒⠒⠊⠉⠉⠉
10² ┤ ⣀⣀⣀⡠⠤⠤⠤⠔⢒⣒⠶⠛⠋⠉⠉
│⠒⠒⠉⠉⠉⠉ ⢀⣀⠤⠒⠊⠁
│ ⢀⣀⠤⠒⠊⠁
1 ┤⣀⠤⠒⠊⠁
└┬──────────────────────┬───────────────────────┬───────────
1 10² 10⁴
```
## Relationships
Scatters, fits, and the labeled charts a paper actually draws.
### clusters
Palmer penguins through one color_by channel: categories take palette colors, name themselves in the legend, and cycle marker shapes in colorless output.
Source: [examples/clusters.rs](examples/clusters.rs)
```text
penguin bills by species
•• Adelie ++ Chinstrap xx Gentoo
21 ┤ ⡀ ⠄⡀ ⢀ ⠄ ⠁
│ ⡀ ⠠⠄ ⠠ + +
20 ┤ ⠄⠄⠄ ⠠ ⠌ ⠂ ⠁ + + ++ ++
│ ⡀ ⢄⢀⢀⠁ ⠂ ⡤ ⠁ + + + + ++ +
19 ┤ ⠐ ⠠ ⠁⢀ ⠰⡀⠁⢂⡀⡔⠄⡦⠆ ⠐ ⠈⠂ +⠠+ + +++++
d │ ⠠ ⠂⠠⠃⠐⠍ ⠁⠄⠐⠡⡁⠇⠐⠠⠂⠂ ++ + ++ ++
e 18 ┤ ⠁⠁⠂⠈⠆⠡⠈⠄⢁⠑⡠⠠⠇⠈⠂⡁⠈ ⡀+ ⠁ + + ++ + +
p 17 ┤ ⢀ ⠄ ⢁⡰⡀ ⢀⣂ ⣌⠈⠄⢀⢄⠁ + x ++ + + + x x x x
t │ ⠈⠄⠄⢈⠂⢀ ⠐ + + + x ++++ x x
h 16 ┤ ⠂ ⢀⠂⠐ ⠄ x xxxx xxx x
│ ⠠ x x xxxxx xxxxx x x x
15 ┤ x x x xxxx xxxxxxxx
│ xx x xxxxxxxxx x x
14 ┤ x x xx xxx xx
13 ┤ x xx x xx
└┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬
30 35 40 45 50 55 60
bill length, mm
```
### fit
Least squares as a stat: scatter, trend line, and a 95% confidence band from one mergeable Fit accumulator — slope, intercept, and R² included.
Source: [examples/fit.rs](examples/fit.rs)
```text
y = 0.82x + 3.87 R² = 0.95
30 ┤ ⠐⣀⣤⡄
│ ⡈⣀⣠⣴⣾⣿⡿⠿⠃
25 ┤ ⠂⢀⣠⣤⣶⣿⡿⠟⡛⠉⠁ ⠄
│ ⢂⣈⣥⣶⣿⠿⠟⠫⠉ ⡀
r │ ⠠ ⣀⣮⣶⣾⠿⠛⠋⠉ ⠄
e 20 ┤ ⠁ ⣐⣤⣶⡾⠿⠛⠉⠁
s │ ⠂ ⣐⣤⣴⡾⠟⠛⠉⠃ ⠐
p │ ⣀⣤⣴⡾⠟⠟⠉⠁
o 15 ┤ ⢀⣄⣦⣴⡾⠿⠛⠉⠁
n │ ⠂ ⢀⣀⣤⣷⡾⠟⠛⠉ ⠁
s 10 ┤ ⡀ ⢈⣨⣤⣶⡾⡿⠛⢉⠁⡀⡀
e │ ⣀⣠⣴⣶⣿⠿⠛⠉⠁ ⠂
│⠄ ⣀⣤⣴⣾⣿⠿⠛⠋⠉⠈
5 ┤⣶⣾⣿⠿⠟⠋⠉⠁
│⠛⠋ ⠁
0 ┤
└┬──────────┬──────────┬──────────┬──────────┬─────────┬──────────┬
0 5 10 15 20 25 30
dose
```
### measurements
Error bars: a Range interval around each measured point.
Source: [examples/measurements.rs](examples/measurements.rs)
```text
measurements with uncertainty (synthetic)
6 ┤ ⠐⡖
5 ┤ ⡇
│ ⠈⡏ ⡇ ⠈⡏⠁
4 ┤ ⠐⠓ ⠈⠉ ⠠⠧⠄ ⢀⣀⡀ ⢤
│ ⢸ ⢸
3 ┤ ⢸ ⣀⡀ ⠼
2 ┤ ⠐⠚⠂ ⠐⢲⠂ ⢸
│ ⢸ ⢹⠁ ⢸
1 ┤ ⠐⠚⠂ ⢸ ⠉⠁
0 ┤ ⠚⠂
└┬───────────┬───────────┬───────────┬───────────┬
0 2 4 6 8
```
### volcano
A volcano plot from the grammar, no preset: significance classes via color_by, thresholds as Rules, grey pinned to the insignificant mass.
Source: [examples/volcano.rs](examples/volcano.rs)
```text
differential expression (synthetic)
•• n.s. ++ down xx up
5 ┤ ⡇ ⢸ x
│ ⡄ ⢠
│ ⡃ ⢘ x xx
4 ┤ + + + ⠇ ⠸ x xx
- │ + ⡆ ⢰ x
l │ + ++ + ⡅ ⢨ xx x x x
o 3 ┤ + + ⠃ ⠘ xx
g │ ++ + + ⡇ ⢸ x
1 │ + + + ⡆ ⢰ x x x xx x
0 │ + + + ⡁ ⢀ ⢈ xx x x
2 ┤⠉⠉ ⠉⠉⠈⠉⠁⠈⠉⠁⠉⠉ ⠉⠉⠈⠉⠡⠈⠉⠁⠏⠉⡀⠩⠉⠈⠉⠁⠈⠉⠁⠉⠉ ⠉⠉⠈⠉⢁⡌⠉⠁⠹⠉⠤⠉⢉⠈⠋⠁⠈⠉⠁⠉⠉ ⠉⠉⠈⠉⠁⠈⠉⠁⠉
p │ ⠂ ⡇⠐ ⢐⣪⠃⡄ ⠠⠦⠚⠆ ⠂⢸ ⡀ ⠠ ⠠
│ ⠂ ⠠⠃⡄ ⠈⡫⠶⣷⣤⡄ ⢀⣰⢋⣳⢫⣄ ⢠ ⠂ ⠂⢀
1 ┤ ⠐ ⠂ ⡃ ⠐⡒⢔⣧⢬⡺⢲⡀ ⠠⡮⠍⢶⣎⡨⣕ ⢘ ⠂
│ ⠠ ⡀⠇ ⢦⠅⣧⡫⠕⡭⠼⠬⡺⡛⣾⢶⢄⣻⢣⠁ ⠸ ⠠
│ ⠂⡆ ⣣⢝⣝⣃⣽⡁⢗⣳⠿⠾⡳⣏⢠⢊⡟⠂ ⢰
0 ┤ ⠐⡅ ⢀⢀⣓⣴⣰⣬⣜⣟⣹⣻⣺⣿⣭⣯⣣⣰⣢⡄⡀ ⢨
└┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬
-3 -2 -1 0 1 2 3
log2 fold change
```
### manhattan
A Manhattan plot from the grammar, no preset: chromosomes alternate two shades as unlabeled layers, the genome-wide threshold is a labeled Rule.
Source: [examples/manhattan.rs](examples/manhattan.rs)
```text
association scan (synthetic)
── genome-wide
10 ┤ ⠈
│ ⠈ ⠘
│ ⢐ ⠒⡀ ⠈
- 8 ┤ ⢡⡄ ⠱⡀ ⢸
l │ ⡐⣂ ⠤ ⠠
o │ ⠂⡖ ⠰⡂ ⢀⡀
g 6 ┤ ⠘⡏⠴⡀ ⠔ ⡒⠃
1 │⠤⠤ ⠤⠤⠠⠤⠄⠠⠤⠄⠤⠤ ⠤⠤⠠⠤⠄⠰⠥⠦⠤⠤ ⠤⠤⠠⠤⠄⠠⠤⠄⠤⠤ ⠤⠤⠠⠤⠄⠠⠤⢄⠤⢬ ⠤⠤⠠⠤⠄⠠⠤⠄⠤⣧⣃⠤⠤⠠⠤⠄⠠⠤⠄⠤⠤ ⠤
0 │ ⢀⡼ ⠈⠅ ⢠⠃⢀ ⠠⡄⢅
4 ┤ ⢄⠁⡀⠨⠢⡄ ⡘⠃⡐⡂ ⢨⠃⠨
p │⢀⡀⢀⢀⡀ ⣀⣀ ⢀ ⡀⣀⡀⡀ ⢀⡀⢡⢎ ⠈⠖⡢⡀ ⢀⢀⡀⣀⣀⣀⢀ ⡀ ⡀⡀⢀⡀⣀⢀⡀⢨ ⠨⠡ ⣀⣀⡀ ⡀⡀⡠ ⢰ ⡀ ⣀⡀⡀
2 ┤ ⡳⡳⡓⢒⠝⡷⠳⣾⠒⢞⠆⠓⣐⢇⢾⢧⢆⡨⠂ ⢴⣈⣇⢦⣑⠆⡡⡃⢖⣩⢁⡸⢞⢳⢚⠟⡕⣉⠏⢕⠈⡡ ⠠⠋⡭⡰⡬⣸⣲⡹⣜⠮⣋ ⢀⢡⡔⡫⡐⣢⢆⠅
│⣋⠬⣆⢀⡍⡣⣒⠬⢞⡼⢂⢵⣲⡢⢣⠕⢾⠙⡲ ⠐⠫⢚⢧⢍⠷⡭⡜⡱⠳⢭⡡⣷⢐⡔⢭⣅⡌⢒⠫⡿⠇ ⠵⣽⠘⢡⢢⢍⡆⡕⣈⠡ ⠈⡩⠹⣳⣰⠽⡗⠄
│⢡⣡⠤⡥⣪⢴⢚⢤⡀⢏⣁⡀⠉⡚⡸⠫⣔⢛⡅ ⢨⠬⠦⡐⠜⠱⢬⢢⠥⡚⠲⠔⡌⢠⠦⢵⠝⠔⠣⢹⡀ ⠌⠁⡖⢷⡂⢓⡕⠜⠘⢃ ⣖⣑⢦⣘⢱⡉
0 ┤⢮⠙⣰⡹⠬⠭⠉⢦⠌⢄⡫⢩⢫⠳⠫⠆⡢⠤ ⠐⢐⡱⡉⡬⠩⡢⠠⡀⣮⡛⠠⠭⡗⡰⠄⡬⠝⠼⠂ ⠙⠃⠼⡐⠧⠣⢪⠭⢧⠓ ⠪⠮⠌⡧⠔⢸⠄
└┬─────────┬─────────┬─────────┬────────┬─────────┬─────────┬─────────┬
0 200 400 600 800 1000 1200 1400
genomic position
```
### candles
Candlesticks from the grammar, no preset: Range whiskers and bodies with up/down days split by color_by.
Source: [examples/candles.rs](examples/candles.rs)
```text
daily candles (synthetic)
┃┃ up ┃┃ down
107.5 ┤ ⠠⡤
│ ⠠⢤⣄⡤⡤⡧⢤⠄ ⢀⣀
105.0 ┤ ⢸⣾⣶⣷⣷⣾⣶⣀⣀⡗⢲⠂
│ ⠠⣼⣿⣿⠿⡿⣿⣿⣿⣤⣿⣿⣿⣿⠂
102.5 ┤⠠⢤⠄⠒⣖⣿⣿⣿⠒⠓⡧⠼⢿⠿⣿⣟⢻⣿⣶⡤
p │⡏⢸⢲⣶⣿⡟⢻ ⠐⠓ ⠉⠓⠓⠈⢹⣿⣿⡇⢀⣀⡀
r 100.0 ┤⣿⣿⣿⣿⣿⡷⠚⠂ ⠈⢹⣿⣿⡧⢸⢹⠁
i │⣇⣸⣹⠉⡏⠁ ⠉⠉⡯⠯⢹⣿⣿⣀ ⠐⢲⠂ ⢀⣀⣀⡀
c │ ⠉⠉⠉ ⠒⠓⠐⠚⢻⣿⣷⡆ ⢹⠓⡖ ⠒⡞⡯⢤⠄ ⣬⣯⣼⣤⡒⡖ ⢸⢸
e 97.5 ┤ ⠚⣿⣿⡏⢀⣸⣀⣇⣀ ⣤⣧⣧⣼⣤⠒⣿⣿⣿⣿⣿⣿⣷⣾⣾⣶⡖
│ ⣉⣿⣿⣿⣿⣿⣿⣧⣤⢶⠂⢀⣀ ⢤⣿⣿⣿⣿⣿⣷⣿⣟⢻⠚⠦⠿⠛⢹⣿⣿⣇⡀
95.0 ┤ ⠿⡿⢿⢿⠉⣿⣿⣿⣼⣭⣯⣏⣹⣿⣿⡟⢓⣸⣻⠛⡟⠓⠚⠂ ⠠⠼⢼⣿⣿⡗
│ ⠠⠷⠚⠾⠖⠛⣿⣿⣿⣿⣿⣿⣿⡽⠟⠓ ⠉⠓⠓ ⠚⠿⣿⣷⣶⠂
92.5 ┤ ⠈⠹⢿⢿⠿⠯⡏⠁ ⡿⣿⣿⣤
│ ⢸⠼⠄⠈⠉ ⠉⠩⢧⣸⡀
90.0 ┤ ⠈⠉⠁
└┬───────────┬────────────┬───────────┬────────────┬───────────┬
0 10 20 30 40 50
```
## Time
Calendar axes, training logs, and series that show up in order.
### timeseries
The Keeling curve: monthly CO2 at Mauna Loa since 1958 (NOAA), on a calendar axis.
Source: [examples/timeseries.rs](examples/timeseries.rs)
```text
atmospheric CO2 at Mauna Loa (NOAA)
440 ┤
│ ⢀⣠⣾⡎
420 ┤ ⢀⣤⣴⡾⠏⠁
│ ⢀⣠⣴⡾⠟⠋⠁
400 ┤ ⢠⣠⣴⡿⠟⠋⠁
│ ⢀⣤⣴⣾⡟⠛⠉
p │ ⢀⣀⣴⣴⡾⠟⠏⠁
p 380 ┤ ⡀⣀⣤⣾⡿⠟⠋⠁
m │ ⣀⣀⣤⣶⢿⠿⠛⠉
360 ┤ ⣀⣠⣴⣶⣶⣿⠿⠛⠛⠁
│ ⢀⣀⣤⣴⣶⡿⠻⠛⠙⠉⠉
340 ┤ ⣀⣀⣤⣶⣿⡿⠻⠛⠉
│ ⡀⣀⣤⣦⣶⣶⠿⠻⠛⠉⠈
320 ┤ ⡀⡀⣀⣄⣄⣄⣤⣦⣶⢿⠿⠻⠛⠉⠈⠈
│⢲⢿⠿⠻⠻⠛⠙⠙⠉⠈
└──┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬──────
1960 1970 1980 1990 2000 2010 2020
```
### calendar
Events per calendar month: stat::calendar_bins counts per bucket of its true length, empties kept, and Bars::intervals draws each between its own edges on the time axis.
Source: [examples/calendar.rs](examples/calendar.rs)
```text
commits per month (synthetic)
│█████ ▅▅▅▅▄▄▄▄▄▅▅▅▅▄▄▄▄▄▇▇▇▇ ▄▄▄▄▄▅▅▅▅▃▃▃▃▃▇▇▇▇▇▇▇▇▇
60 ┤█████▅▅▅▅██████████████████████ ███████████████████████▅▅▅▅
│███████████████████████████████ ███████████████████████████
│███████████████████████████████ ███████████████████████████
40 ┤███████████████████████████████ ███████████████████████████
│███████████████████████████████ ███████████████████████████
│███████████████████████████████ ███████████████████████████
20 ┤███████████████████████████████ ███████████████████████████
│███████████████████████████████ ███████████████████████████
│███████████████████████████████ ███████████████████████████
0 ┤███████████████████████████████ ███████████████████████████▃▃▃▃▃
└┬────────────┬─────────────┬────────────┬─────────────┬────────────┬
2025 Apr Jul Oct 2026 Apr
```
### intraday
One session on a calendar axis: hour labels, and the day they leave out printed once at the end of the axis-title row — the context note, an automatic layout rule.
Source: [examples/intraday.rs](examples/intraday.rs)
```text
one session (synthetic)
── open ── last
184.25 ┤ ⢀⣿⡄
│⢀⡀ ⢀ ⣤⣸⠟⣧
184.00 ┤⢾⣧⢤⡤⢤⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⢤⣿⣷⠿⣿⠤⠭
│⠈⢸⣿⣷⣿⣇ ⢀⢸⠇⠿
183.75 ┤ ⠘⠃⢸⡇⢻⣤⡄ ⣴ ⢀⡄⢀ ⣿⣿
$ │ ⠸⡟⢷⣾⣶⠟⡇⣤⣀⣤ ⣀ ⡼⣿⣿⣇⠇⠁
183.50 ┤ ⢸⠉⡿ ⢱⠿⣿⠿⡄ ⢀⣤ ⣀⣸⣿⢀⣄⣸⣆⠇⠸⠇⠘
│ ⠈ ⠿ ⢣⣶ ⡀⢰⣦ ⢠⡄ ⢠⡄ ⢀ ⣸⢿⣾⣿⡏⠘⡼⢿⡟⠹
183.25 ┤ ⠸⠹⣿⣿⡿⠻⣦⣄⢠⣄⡟⢿⣼⡇⡿⣷⢀ ⢀⢠⣿⡄⣤⢠⣷⡏ ⠿⠘⠁ ⠁⠘⠃
│ ⠻ ⠇ ⣿⢿⡿⢿⡇⠸⡏⢱⠁⢹⣿⡆⣾⣾⠃⢻⠿⣿⠻⠃
183.00 ┤ ⠈⠘⠃⠈ ⠈⠃⢱⠁⠟ ⠘ ⠛
└────┬─────────┬────────┬─────────┬────────┬─────────┬────────┬
10:00 11:00 12:00 13:00 14:00 15:00 16:00
time (UTC) Aug 3 2026
```
### loss
A real training log: topos's bigram model on 32k names — per-step loss, rolling mean, and the known bigram limit as a rule.
Source: [examples/loss.rs](examples/loss.rs)
```text
topos: bigram training on 32k names
── minibatch ── rolling mean ── bigram limit
3.3 ┤⡇
3.2 ┤⣧
│⢿
3.1 ┤⢸⡄
3.0 ┤⢸⡇
l │⢸⢸
o 2.9 ┤ ⡏⡆
s 2.8 ┤ ⣧⡇
s │ ⢹⣼
2.7 ┤ ⠈⣷⣧
2.6 ┤ ⢿⣿⣶⡀⢀ ⢀ ⡄ ⡄
│ ⡟⡟⣿⣿⣦⣷⣶⣾⣾⣇⣦⣧⡀⣤⣠⣄⢰ ⣀⣠⡄⢠⣤⣀⡆⡄⣇⣀⢠⡀⡀⢀⡄⢀⡀ ⣄⣠⡇⣀⢠ ⣀⡀ ⡄ ⡀ ⢀⣠⣀⣰⣀⢸⡀ ⢀ ⡆ ⡄
2.5 ┤⣀⣀ ⣀⣀⢀⣋⡁⢛⣻⣹⣻⣏⠟⣿⣿⣿⣿⣿⣿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣷⣿⣿⣿⣿⢿⣾⡿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣾⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣿⣾⣾⣿⣿⣿
2.4 ┤ ⠈ ⠈ ⠁⠋⠁⠃⠃⠉ ⠏⠛⠸⠈⠁⠘⠃⠏⠛⠛⠈⠈⠹⠹⠉⢸⠃⠇⠋⠇⠘⠋⡏⠋⠏⠿⠟⠻⠘⡇⠙⠙⠇⠏⠸ ⠏⠋⠻⠻⢻⡿⠻⠸⡏⠃
└┬──────┬─────┬──────┬──────┬──────┬──────┬──────┬──────┬─────┬──────┬
0 100 200 300 400 500 600 700 800 900 1000
step
```
### seeds
Training curves across random seeds: five runs pooled into per-step quantiles, the p10-p90 band as an Area, the median inside it, and its stat::ewma smoothing on top - on a log y axis.
Source: [examples/seeds.rs](examples/seeds.rs)
```text
loss across 5 seeds
▄▄ p10-p90 ── median ── ewma
3.5 ┤⢠⣀
3.0 ┤⢸⣿⣷⡄ ─╮
2.5 ┤⢸⣿⣿⣿⣶⣶╰───╮
2.0 ┤⠸⢿⣿⣿⣿⣿⣿⣶⣄⡀╰──╮
│ ⠈⠻⣿⣿⣿⣿⣿⣿⣶⣄ ╰──╮
1.5 ┤ ⠈⠛⠿⣿⣿⣿⣿⣿⣿⣄⣀ ╰──╮
│ ⠹⢿⣿⣿⣿⣿⣿⣿⣷⣄⡀ ╰───╮
│ ⠈⠻⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⡀ ╰──╮
1.0 ┤ ⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆ ╰───╮
│ ⠙⢿⣿⢿⣿⣿⣿⣿⣿⣿⣷⣄⣀⣠⣤╰──╮
│ ⠁ ⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦╰───╮
│ ⠘⠁⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿╰─────╮⣦⣠⣤⣀ ⢀⣀⡀
│ ⠉⠛⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿╰──────╮⣿⣤⣴⣾⣦⣄⣴⡇
0.5 ┤ ⠘⠛⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿╰────────
│ ⠛⠛⠿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
│ ⠈⠁ ⠉⠉⠉⠻⢿⣿⣿⣿⣿⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
│ ⠈⠋⠁ ⠈⠉⠉ ⠈⠛⠛⠛⢿⡿⠃
└┬──────┬──────┬───────┬──────┬──────┬───────┬──────┬──────┬
0 50 100 150 200 250 300 350 400
step
```
### energy
Stacked areas via the Stack stat: each layer sits on the sum of the ones below.
Source: [examples/energy.rs](examples/energy.rs)
```text
energy mix, stacked (synthetic)
▄▄ solar ▄▄ wind ▄▄ hydro
│ ⢀⣠⣶⣿⣿⣿⣦⣄
10 ┤ ⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⡀
│ ⣀⣠⣤⣤⣄⡀ ⢀⣀⣀⣀⣀⡀⢀⣤⣶⣾⣿⣶⣶⣤⣤⣄⣀ ⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
8 ┤⣰⣾⣿⣿⣿⣿⣿⣿⣷⣴⣶⣶⣶⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣤⣤⣤⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
6 ┤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
4 ┤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
2 ┤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
0 ┤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇
└┬──────┬───────┬──────┬───────┬──────┬──────┬───────┬──────┬
0 10 20 30 40 50 60 70 80
```
### bollinger
Bollinger bands from the grammar, no preset: a centered Window's mean and sample deviation — two reducers from the one vocabulary — as ±2σ edge lines around a dashed mean and the price itself.
Source: [examples/bollinger.rs](examples/bollinger.rs)
```text
Bollinger bands: a centered window's mean ± 2σ (synthetic)
── ±2σ ── 20-day mean ── price
102.5 ┤⠊⠉⠒⠤⡀ ⢀⡀ ⡤⠤⣄⣀
│⢠⣰ ⠱⡀ ⣠⠒⠁⠑⠒⡒⣎⠁ ⠉⠢⡀
100.0 ┤⠃⠃⡇ ⢇ ⢀⠴⠊ ⢀ ⣄⠟⢈⡆⢀⡶⡀ ⡇ ⣄⣀⡀
│⠢⡀⢸ ⠈⢆ ⢠⠊ ⢠⣜⢷⢸⠉⠁ ⠙⡼⡇⡇ ⠸⡀ ⢀⠔⠁ ⢣ ⢀⣀⡀ ⢀⣀⣠⠄
97.5 ┤ ⠒⢇ ⠈⠱⠒⢚⡖⠊⡊⠁ ⡾ ⠘⠃⣀⡤⠤⡀ ⠈⢸ ⠱⡀ ⢀⠤⠤⠴⢁ ⢇ ⢀⠇ ⠓⠤⠼⠉⠉⢀⡸⠆
│ ⠘⡕⠆⣀⣆ ⡸⠘⢴⣱⡀⠔⣶⡸ ⡎ ⢇ ⣧⡓⡄ ⠘⡄ ⢀⠔⠚⠁⢀⢶⢠⠎⠣⣤ ⠈⡆ ⢠⠃ ⡀⡆ ⢀⡮⠅⠆
95.0 ┤⢆ ⠱⢆⡸⢸⢠⠋⠉⠈ ⣇⠶⠁⠃ ⡠⠊ ⠑⡄ ⠃⠱⢇ ⠘⡄⢀⠤⠊⠉ ⣀⣶⢼⠒⠿⠢⠄⠏⢇ ⠘⣄⠎ ⡰⡹⠼⠣⠼
│⠈⡆ ⠘⣁⡨⠮⢄⣀⣠⠔⢻⡀⢀⣀⡸ ⠱⡀ ⠸⡢⢀ ⠘⠁⢠⣀⣠⠎⢹ ⠟⣀⣠ ⠈⠣⠸⡀ ⢠⡸⡷⠁ ⢀⠤⠤⠤⠂
92.5 ┤ ⠘⠢⢄⢀⡰⠁ ⠈⠉ ⢣ ⢇⣌⡵⣸⢷⡻ ⠉ ⡠⠤⠚ ⠈⢆ ⠑⡇ ⡧⠋ ⢀⠖⠁
│ ⠁ ⡇ ⠈⢸⠁⢋⣈⣡⠤⠊⠊ ⠘⡄ ⢱⢄ ⣠⠇ ⢀⠎
90.0 ┤ ⠘⣄⢀⣀⣀⠔⠁ ⠸⡀ ⢣⠐⠒⠃⡜ ⡜
│ ⠋ ⡇ ⡇⡄⢰⠁ ⡇
87.5 ┤ ⢣ ⠟⠘⠇ ⢰⠁
│ ⢣ ⣀⡀ ⡠⠃
85.0 ┤ ⣇⡠⠎ ⠑⠒⠃
└┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬
0 20 40 60 80 100 120 140 160
day
```
## The ML set
The charts a training loop needs. Each one is a few marks put together.
### roc
An ROC curve from the grammar, no preset: stat::roc sweeps the thresholds, stat::auc puts the area in the title, and the chance diagonal is a labeled line.
Source: [examples/roc.rs](examples/roc.rs)
```text
ROC, AUC 0.768
── chance ── model
t 1.0 ┤ ⢠⠤⠤⠤⠖⠒⠋⠉⠉⠉⠉⠉⠉⠉⠩⠉⠋
r 0.9 ┤ ⣀⣀⣀⡤⠤⠤⠴⠋⠉ ⡀⠄⠈
u │ ⡖⠒⠋⠁ ⢀⠐
e 0.8 ┤ ⣀⡏⠁ ⠄⠁
│ ⣠⠖⠚⠁ ⡀⠐⠈
p 0.7 ┤ ⢠⠴⠚⠁ ⠠ ⠂
o 0.6 ┤ ⢰⠚⠉ ⡀⠄⠈
s │ ⡴⠒⠋ ⢀⠐
i 0.5 ┤ ⡤⠞⠁ ⢀ ⠄⠁
t │ ⢀⣀⣀⣠⠖⠋⠁ ⡀⠐
i 0.4 ┤ ⢠⠞ ⠠ ⠁
v 0.3 ┤ ⢀⡏ ⡀⠂⠈
e │⢠⠏ ⠠⠐
0.2 ┤⢸ ⢀ ⠄⠁
r │⣸ ⡀⠐
a 0.1 ┤⡇ ⠠ ⠁
t 0.0 ┤⡇⠂⠈
└┬─────────┬─────────┬─────────┬─────────┬─────────┬
0.0 0.2 0.4 0.6 0.8 1.0
false positive rate
```
### calibration
A reliability diagram from the grammar, no preset: stat::binned with a Mean reducer turns 0/1 outcomes into accuracy per confidence bin, plotted against the diagonal of perfect calibration.
Source: [examples/calibration.rs](examples/calibration.rs)
```text
reliability
── perfect ── model
o 1.0 ┤ ⠠ ⠂
b 0.9 ┤ ⡀⠄⠈
s │ ⢀⠐
e 0.8 ┤ ⠄⠁
r │ ⡀⠐⠈ ⣀o⠔⠒⠒⠉o
v 0.7 ┤ ⠠ ⠂ ⢀⠔⠊
e 0.6 ┤ ⣀⣄⡨o⠤⠔⠒⠒o⠁
d │ ⢀⢤o⠉⠁
0.5 ┤ ⣀⠔⠎⠁
a │ ⢀⡠⠤⡒o
c 0.4 ┤ ⣀⠔o⠉⠉⠉⠉o⠡ ⠁
c 0.3 ┤ o⠤⠊ ⡀⠂⠈
u │ o⡠⠔⠒⠉ ⠠⠐
r 0.2 ┤ ⢀ ⠄⠁
a │ ⡀⠐
c 0.1 ┤ ⠠ ⠁
y 0.0 ┤⡀⠂⠈
└┬─────────┬─────────┬─────────┬─────────┬─────────┬
0.0 0.2 0.4 0.6 0.8 1.0
claimed confidence
```
### confusion
A confusion matrix from the grammar, no preset: a Cells matrix on Bands axes — class names label rows and columns, counts sit centered in their cells through the Text align channel, and row 0 is the top band so the chart reads in matrix order.
Source: [examples/confusion.rs](examples/confusion.rs)
```text
validation confusion
│
│ █████████ ░░░░░░░░░ ░░░░░░░░░
cat ┤ ███38████ ░░░░░2░░░ ░░░░0░░░░
│ █████████ ░░░░░░░░░ ░░░░░░░░░
t │ ░░░░░░░░░ █████████ ░░░░░░░░░
r │ ░░░░░░░░░ █████████ ░░░░░░░░░
u dog ┤ ░░░░3░░░░ ████33███ ░░░░4░░░░
e │
│ ░░░░░░░░░ ░░░░░░░░░ █████████
bird ┤ ░░░░1░░░░ ░░░░░5░░░ ███34████
│ ░░░░░░░░░ ░░░░░░░░░ █████████
│
└──────────────────────────────────────
cat dog bird
predicted
```
### attention
An attention map: token labels on both axes, a logarithmic colormap so weights spanning decades stay distinguishable, and the causal mask's zeros rendered as honest gaps — with decade ticks on the colorbar.
Source: [examples/attention.rs](examples/attention.rs)
```text
attention, layer 7 head 3
│ █████ █ 1
The ┤ █████ █
│ █████ █████ █
robot ┤ █████ █████ █
│ █████ █████ ▓
q ate ┤ ▓▓▓▓▓ █████ █████ ▓
u │ ▓▓▓▓▓ █████ █████ ▓ 10⁻²
e │ ▓▓▓▓▓ ▓▓▓▓▓ █████ █████ ▓
r the ┤ ▓▓▓▓▓ ▓▓▓▓▓ █████ █████ ▒
y │ ▒▒▒▒▒ ▓▓▓▓▓ ▓▓▓▓▓ █████ █████ ▒
red ┤ ▒▒▒▒▒ ▓▓▓▓▓ ▓▓▓▓▓ █████ █████ ▒
│ ░░░░░ ▒▒▒▒▒ ▓▓▓▓▓ ▓▓▓▓▓ █████ █████ ▒
apple ┤ ░░░░░ ▒▒▒▒▒ ▓▓▓▓▓ ▓▓▓▓▓ █████ █████ ░ 10⁻⁴
│ ░░░░░ █████ ▒▒▒▒▒ ▒▒▒▒▒ ▓▓▓▓▓ █████ █████ ░
. ┤ ░░░░░ █████ ▒▒▒▒▒ ▒▒▒▒▒ ▓▓▓▓▓ █████ █████ ░
│ ░
└──────────────────────────────────────────────────
The robot ate the red apple .
key
```
### filters
Convolution filters as images: a Gabor bank with color opponency through Cells::rgb — direct colors, no colormap, and a luma shade ramp when the output is a plain pipe.
Source: [examples/filters.rs](examples/filters.rs)
```text
0° 57° 120°
20 ┤▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▓▓ 20 ┤▒▒▓▓▓▓▒▒▒▒▓▓▓▒▒▒▒▓ 20 ┤▒▒▒▒▒▓▓▓▓▒▒▒▒▓▓▓▓▒
│▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▓▓ │▓▒▒▓▓▓▓▓▓▒▒▓▓▓▓▓▓▒ │▒▓▓▓▓▓▓▒▒▒▓▓▓▓▓▓▒▒
15 ┤▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▓▓ 15 ┤▓▓▓▓▓▒▓▓▓▓▓▓▓▒▓▓▓▓ 15 ┤▓▓▓▓▒▓▓▓▓▓▓▓▒▒▓▓▓▓
│▓▓▒▒▓▓▒▒██▒▒▓▓▒▒▓▓ │▓▒▒▓▓██▓▒░▒▓▓▓▓▓▒▒ │▒▓▓▓▓▓▒▒░▒▓█▓▓▓▒▒▒
10 ┤▓▓▒▒▓▓░▒██▒░▓▓▒▒▓▓ 10 ┤▓▓▓▓▓▒▒▒▓██▓▓▒▒▓▓▓ 10 ┤▓▓▓▒▓▓▓██▓▒▒▒▓▓▓▓▓
5 ┤▓▓▒▒▓▓▒▒██▒▒▓▓▒▒▓▓ 5 ┤▓▒▒▓▓▓▓▓▒▒▒▓█▓▓▓▒▒ 5 ┤▒▓▓▓▓▓▓▒▒▒▓▓▓▓▓▒▒▒
│▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▓▓ │▓▓▓▓▓▒▒▓▓▓▓▓▓▒▒▓▓▓ │▓▓▓▒▓▓▓▓▓▓▓▒▒▓▓▓▓▓
0 ┤▓▓▒▒▓▓▒▒▓▓▒▒▓▓▒▒▓▓ 0 ┤▓▒▒▓▓▓▓▓▒▒▒▓▓▓▓▓▒▒ 0 ┤▒▓▓▓▓▓▓▒▒▓▓▓▓▓▓▒▒▒
└┬──────────────────┬ └┬──────────────────┬ └┬──────────────────┬
0 20 0 20 0 20
29° rgb 92° rgb 149° rgb
20 ┤▒▒▓▓▒▒▒▓▓▒▒▓▓▓▒▒▓▓ 20 ┤▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒ 20 ┤▓▓▒▒▒▓▓▒▒▓▓▓▒▒▓▓▓▒
│▓▒▓▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │▓▓▒▓▓▓▒▒▓▓▓▒▒▓▓▓▒▒
15 ┤▓▓▒▓▓▓▓▒▓▓▓▒▒▓▓▓▓▒ 15 ┤▓▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 15 ┤▒▓▓▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓
│▓▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓▓▒ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │▓▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓▓▓
10 ┤▒▒▓▓▓▒▓▓█▓▒▓▓▓▒▒▓▓ 10 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 10 ┤▓▓▒▓▓▓▓▒▓█▓▓▒▓▓▓▓▒
5 ┤▓▒▒▓▓▓▒▒▓▓▓▒▒▓▓▒▒▓ 5 ┤▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 5 ┤▒▒▓▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓
│▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓▓▓▒ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │▓▓▓▓▒▓▓▓▓▒▓▓▓▓▒▓▓▓
0 ┤▒▓▓▓▒▒▓▓▓▒▓▓▓▒▒▓▓▓ 0 ┤▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒ 0 ┤▓▓▒▒▓▓▓▒▒▓▓▓▒▒▓▓▓▒
└┬──────────────────┬ └┬──────────────────┬ └┬──────────────────┬
0 20 0 20 0 20
```
### boundary
A decision boundary from the grammar, no preset: Cells::classes colors the feature plane by predicted class through the categorical palette, each region keeps a stable shade with matching legend swatches, and the training points sit on top.
Source: [examples/boundary.rs](examples/boundary.rs)
```text
5-NN decision regions
░░ adelie ▒▒ gentoo ▓▓ chinstrap
3 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
2 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓x▓x▓x▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
│▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓x▓▓xx▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒
1 ┤░░░░▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓x▓xx▓xxx▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░░░░░░▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
0 ┤░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░░░░░░░░░░░░░░▒▒▒▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-1 ┤░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒x▒▒▒xx▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░xxx░x░x░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒xxxxx▒x▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░░░░░x░xx░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒x▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-2 ┤░░░░░░░x░░░x░xx░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
│░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-3 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
└─┬────────┬────────┬────────┬───────┬────────┬────────┬─
-3 -2 -1 0 1 2 3
```
### landscape
A loss landscape with an optimizer trajectory, no new machinery: Himmelblau's basins as dense Cells on a log colormap, and momentum's overshoot-and-curl as a Line with glyph-drawn step markers on top.
Source: [examples/landscape.rs](examples/landscape.rs)
```text
momentum on Himmelblau
5 ┤ █████████████████████████████████████████████████
│ █████████████████████████████████████████████████
4 ┤ ████████▓▓▓▓▓▓▓▓█████████████████████████████████
│ ██████▓▓▓▓▓▓▓▓▓▓▓▓▓▓█████████████████████████████
3 ┤ ██████▓▓▓▓▓▓▓▓▓▓▓▓▓▓██████████▓▓▓▓▓▓▓▓▓▓▓▓███████
│ ███████▓▓▓▓▓▓▓▓▓▓▓████████████▓▓▓▓▓▓▓▓▓▓▓▓▓██████
2 ┤ █████████▓▓▓▓▓██████████████████▓▓▓▓▓▓▒▒▓▓▓▓█████
│ █████████████████████████████████▓▓▓▓▓▓▓▓▓▓▓█████
1 ┤ ███████████████████████████████████▓▓▓▓▓▓▓▓▓▓████
│ ███████████████████████████████████▓▓▓▓▓▓▓▓▓▓████
0 ┤ ████████████████████████████████████▓▓▓▓▓▓▓▓▓████
│ ████████████████████████████████████▓▓▓▓▓▓▓▓▓████
-1 ┤ ████████████████████████████████████▓▓▓▓▓▓▓▓▓▓███
│ █████████ooooooooooo████████████████▓▓▓▓▓▒▓▓▓▓███
-2 ┤ ███████oo▓██████████o███████████████▓▓▓▓▓▒▒▓▓▓███
│ ████▓▓▓o▓▓▓▓█████████o███████████████▓▓▓▓▓▓▓▓▓███
-3 ┤ ███▓▓▓▓o▓▓▓▓█████████oo████████████████▓▓▓▓▓▓████
│ ██▓▓▓▓oo▓▓▓███████████o██████████████████████████
-4 ┤ ███▓▓▓▓▓▓██████████████o█████████████████████████
│ ███████████████████████o█████████████████████████
-5 ┤ ███████████████████████o█████████████████████████
└┬────────┬─────────┬─────────┬────────┬─────────┬────────┬
-6 -4 -2 0 2 4 6
```
## Grids and fields
Dense matrices, surfaces, and vector fields.
### correlation
An annotated correlation matrix from the grammar, no preset: signed data on a diverging colormap centered at zero, every coefficient printed in its cell. Annotations keep the field they land on as their background and pick dark or light ink from the luminance underneath; in plain output the digits stand beside the shades, so the numbers survive any pipe.
Source: [examples/correlation.rs](examples/correlation.rs)
```text
feature correlation (synthetic)
age ┤ █+1.00█+0.60▓+0.23▒-0.03▒-0.15▒-0.16▒-0.12▒-0.07
len ┤ █+0.60█+1.00▒-0.06▒-0.29▒-0.32▒-0.24▒-0.13▒-0.04
dep ┤ ▓+0.23▒-0.06█+1.00░-0.65▒-0.49▒-0.27▒-0.08▓+0.04
mass ┤ ▒-0.03▒-0.29░-0.65█+1.00░-0.54▒-0.15▓+0.08▓+0.17
veg ┤ ▒-0.15▒-0.32▒-0.49░-0.54█+1.00▓+0.17▓+0.35▓+0.34
kcal ┤ ▒-0.16▒-0.24▒-0.27▒-0.15▓+0.17█+1.00█+0.69▓+0.47
spd ┤ ▒-0.12▒-0.13▒-0.08▓+0.08▓+0.35█+0.69█+1.00▓+0.46
alt ┤ ▒-0.07▒-0.04▓+0.04▓+0.17▓+0.34▓+0.47▓+0.46█+1.00
└──────────────────────────────────────────────────
age len dep mass veg kcal spd alt
```
### seasons
A decade of Mauna Loa CO₂ as one stat table — ninety-six numbers, months down, years across, each year-column formatted and colored on its own scale (the color shows in a terminal; the digits survive any pipe).
Source: [examples/seasons.rs](examples/seasons.rs)
```text
Mauna Loa CO₂, monthly mean ppm
Jan ┤ 408.2 411.0 413.6 415.5 418.1 419.5 422.8 426.7
Feb ┤ 408.5 412.0 414.3 416.7 419.2 420.3 424.6 427.1
Mar ┤ 409.6 412.2 414.7 417.6 418.8 421.0 425.4 428.2
Apr ┤ 410.5 413.5 416.4 419.0 420.2 423.3 426.5 429.6
May ┤ 411.4 414.9 417.3 419.1 421.0 424.0 426.9 430.5
Jun ┤ 411.0 414.2 416.6 418.9 420.9 423.7 426.9 429.6
Jul ┤ 408.9 412.0 414.6 416.9 418.9 421.8 425.6 427.9
Aug ┤ 407.2 410.2 412.8 414.4 417.2 419.7 423.0 425.5
Sep ┤ 405.7 408.8 411.5 413.3 415.9 418.5 422.0 424.4
Oct ┤ 406.2 408.7 411.5 413.9 415.7 418.8 422.4 424.9
Nov ┤ 408.2 410.5 413.1 415.0 417.5 420.5 423.9 426.5
Dec ┤ 409.3 412.0 414.2 416.7 419.0 421.9 425.4 427.5
└──────────────────────────────────────────────────────────
2018 2019 2020 2021 2022 2023 2024 2025
```
### spectrogram
A spectrogram: time-frequency power as dense Cells, seconds by hertz through extents, a log frequency axis, and a log colormap - the exponential chirp renders as a straight ridge. The energy is synthesized; FFTs stay the host's job.
Source: [examples/spectrogram.rs](examples/spectrogram.rs)
```text
spectrogram
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ █
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░▒ █ 1
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░▒▒███ █
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░▒▒█████▓▒ █
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░▒▒▓████▓▒▒░░░ █
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░▒▒▓████▓▒▒░░░░░░░ ▓ 10⁻¹
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒█████▓▒▒░░░░░░░░░░░ ▓
10³ ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓████▓▒▒░░░░░░░░░░░░░░░ ▓
H │░░░░░░░░░░░░░░░░░░░░░░░▒▒▓████▓▒▒█░░░░░░░░░░░░░░░░░░ ▓
z │░░░░░░░░░░░░░░░░░░░░▒▒▓████▓▒░░░░█░░░░░░░░░░░░░░░░░░ ▒ 10⁻²
│████████████████████████████████████████████████████ ▒
│░░░░░░░░░░░░▒▒▓███▓▓▒▒░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ▒
│░░░░░░░░░▒▒████▓▒▒░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ▒
│░░░░▒▒▓▓███▓▒▒░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ░ 10⁻³
│░░▓████▓░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ░
│███▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ░
10² ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░ ░ 10⁻⁴
└┬────────────┬────────────┬───────────┬────────────┬
0 1 2 3 4
s
```
### density2d
A 2D histogram: point density on a grid, empty bins honestly blank.
Source: [examples/density2d.rs](examples/density2d.rs)
```text
two clusters, binned (synthetic)
8 ┤ ░░░░░░░░ █ 60
│ ░░░░░░▒▒░▒░░░░ █
7 ┤ ░░░▒▒▓▒▓▓▓▓▓░░░ █
│ ░░░▒▓▓▓▓▒▓▓▒▒░░░ █
6 ┤ ░░░▒▓▓▒▓▓▒▒▒░░░ ▓
│ ░░░▒▒▒▒░░░░░ ▓ 40
5 ┤ ░░░░▒░░░░░ ▓
│ ░░░░░░░ ░░░ ▒
4 ┤ ░░░░░░▒░░░░░ ▒
│ ░░░░▒▒▒▓▒▒▒░░▒░ ▒ 20
3 ┤ ░░░▒▒▓▓▓▓▓█▓▒▒░▒░ ░
│ ░░░▒▒▓██▓▓▓▒▒▒░░ ░
│ ░░░░▒▒▒▒▒▒▒▒░░░ ░
2 ┤ ░░░░▒░░░░░░ ░ 0
└┬──────┬──────┬──────┬──────┬───────┬──────┬──────┬─
1 2 3 4 5 6 7 8
```
### contour
The MATLAB peaks function as iso-lines: marching squares, tick-chosen levels, a labeled legend.
Source: [examples/contour.rs](examples/contour.rs)
```text
the peaks function
── -6 ── -4 ── -2 ── 0 ── 2 ── 4 ── 6 ── 8
40 ┤ ⣀⡠⠤⠒⠒⠒⠉⠉⠉⠉⠉⠉⠒⠒⠒⠤⠤⣀
│⣀ ⢠⠔⠉ ⢀⣀⠔⠒⠒⠉⢉⣉⣉⡉⠉⠒⠒⠢⢄ ⠉⠒⢄
│ ⠉⠑⠒⠤⠤⠤⣀ ⡔⠁ ⡔⠁ ⢠⠒⠉⠉⠁ ⠈⠉⠉⠒⢄ ⠉⠢⡀ ⠑⡄
35 ┤ ⠉⠉⠒⠤⠤⣀ ⢇ ⢸ ⠠⡃ ⠶⠶ ⢀⠇ ⢸ ⠘⡄
│ ⠉⠉⠒⠒⠤⣀ ⠑⠢⣀⠉⠒⢄⡈⠑⠒⠢⠤⠤⠤⠤⠤⠒⠊⢁⣀⡠⠔⠉ ⡇
30 ┤ ⠉⠒⠢⢄⡀⠑⠒⠤⣈⣉⠉⠒⠒⠒⠒⢒⣒⣉⣉⣁⣀⣀⣀ ⠱⡀
│ ⢀⠤⠤⠤⠤⢄⣀ ⠈⠑⢄ ⠉⠉⠉⠉⠉⠁ ⠉⡆ ⠈⠒⠢⡀
25 ┤ ⡰⠁ ⠱⡀ ⠈⡆ ⣀⠤⡀ ⢠⠃ ⠈⠢⡀
│ ⢸ ⡰⠁ ⢀⠔⠁ ⠈⠒⠁ ⡎ ⢇
│ ⢇⣀ ⣀⡠⠒⠁ ⡤⠊ ⣀⠔⠒⠒⠒⢄ ⡇ ⢸
20 ┤ ⠉⠉⠉ ⢀⡠⠒⠉⢀⠔⠊ ⢱ ⠑⢄ ⢀⠔⠃
│ ⢀⡠⠒⠁ ⡜⠁ ⣀⠎ ⢀⣀⠤⠔⠒⠤⠤⣀ ⠉⠑⠢⠤⠤⠔⠒⠉
15 ┤ ⣀⡠⠔⠊⠁ ⠘⠤⣀⣀⣀⣀⠤⠔⠒⣉⡠⠔⣊⡡⠤⠤⠤⠤⠤⢄⡀⠉⠒⠤⢄⡀
│ ⣀⡠⠤⠒⠊⠉ ⣀⠤⠒⢊⣉⠤⢒⣉⠤⠔⠒⠒⠒⠒⠤⢄⠈⠑⠤⡀ ⠈⠉⠒⠤⣀
│⣀⠤⠔⠒⠒⠊⠉ ⢀⡠⠔⠒⠉ ⡠⠒⠁⡠⠒⠁ ⡠⠔⠒⠒⠢⡄ ⠑⡄ ⠈⢢ ⠉⠉⠒⠤⢄⡀
10 ┤ ⡠⠒⠁ ⢸ ⢇ ⠈⠢⠤⠤⠤⠒⠁ ⡤⠃ ⡸ ⠈⠑⠢⠤⣀
│ ⡠⠊ ⠈⠦⣀ ⠈⠑⠤⠤⠤⠤⠤⠤⠤⠔⠊⠉ ⣀⡠⠊ ⠉⠢⢄⣀
5 ┤ ⡇ ⠈⠑⠒⠢⠤⠤⣀⣀⣀⣀⡠⠤⠒⠒⠊ ⠑⢆
│ ⢇
0 ┤ ⠈⢆
└┬──────┬───────┬──────┬───────┬──────┬───────┬──────┬───────┬──────┬
0 5 10 15 20 25 30 35 40 45
```
### contourf
The peaks function filled: a heatmap under a colormap split at the contour levels, one flat color per band, the colorbar labeling the levels.
Source: [examples/contourf.rs](examples/contourf.rs)
```text
the peaks function, filled
45 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ █
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ █
40 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ █
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓ 6
│▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██████████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
35 ┤▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓██████████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓█████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
30 ┤▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓ 2
25 ┤▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
20 ┤▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▒
│▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▒
15 ┤▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▒ -2
│▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒░░░░░░░░░▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓ ▒
10 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓ ▒
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓ ░
5 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓ ░
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ░ -6
0 ┤▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ░
└┬───────────┬────────────┬───────────┬────────────┬───────────┬
0 10 20 30 40 50
```
### quiver
A vector field: spiral flow into a sink, one arrow per grid point, drawn in data coordinates.
Source: [examples/quiver.rs](examples/quiver.rs)
```text
spiral flow into a sink
2.0 ┤ ⠠⣤⡤⠤⠈⢟⠶⡒
│ ⢀⡀ ⢤⣖⣂⡀⠹⡛⠥⢄⣘⠌⠑⠢⢌⣤⢌⣑⠢⣀
1.5 ┤ ⡰ ⡰ ⢠⠂ ⡠⠂ ⣀⠔ ⢀⡠⣴⣀⡠⠤⢶⡧⠔⠚⠻⠋⠑⠒⠚⠂⠈⠉⢵⡶⠄ ⠹⡳⣒ ⠸⠙⠢⡀ ⠉⠂
│ ⢠⠃ ⡰⠁ ⡰⠁⢀⢀⠎ ⣰⣤⡊ ⠼⠮⠁⠈⠉⠁ ⢀⡀ ⠠⣴⣂⣀⠈⠻⠣⠤⣈⠊⠑⠢⢄⣠⣄⣑⠢⣻⢕⠚⠒⢄
1.0 ┤ ⡀ ⡎⡸⡄⡰⢁⡜⢸⣔⠥⡰⠟⠋⠁⡰⠉⢀ ⡠⠊⢠⣠⠔⠊⠼⠔⠒⠊⠙⠋⠉⠉⠁ ⠉⠡⣤⡄ ⠉⠟⢅ ⠘⠈⠢⢄⠈⢡⣑⢄ ⠁
│ ⠱⣸⢤⢧⠱⠋⢡⢣⠈⢀⡰⠁⡄⢰⣜⠄⡄⠸⠚ ⡠⠉ ⡠ ⢀⣀⡠⠄⢴⠦⠤⠄⠙⠓⠢⠄⠁⠈⠑⠢⠠⣄⡉⠢⢸⢳⠒⠑⠼⠑⡍⠑⠄
0.5 ┤ ⡅⢸⣸ ⢣⣜⢼ ⠸⠓⢱⠁⠈⢀⢸ ⢠⣔⠁ ⠸⠚ ⠉⠁ ⢤⡄ ⠟⢅ ⠉⢆ ⣕⡄ ⡜⡞⢤
│ ⠘⠗⢹ ⡁⣷⢀ ⠰⣼⡆ ⠈⠗⡇ ⠈ ⢰ ⢀⡔ ⠰⠔⠂ ⠈⠑⠂ ⠈⠂ ⣄⡑ ⠰⢳⠓ ⠘⠘⡌⠂ ⢸⣌⠂
y │ ⠱⣸⡟ ⠘⠗⡇ ⢁⡇⡀ ⢠⣧ ⠘⠟ ⠈ ⢠⠄ ⠺⡁ ⠘⡄ ⠈⣦⡀ ⠰⢷⡢ ⠊⢳⡑
0.0 ┤ ⢜⣧⡠ ⠺⣵⠆ ⠈⢫ ⠱⡀ ⢘⡤ ⠘⠂ ⠁ ⠁⡀ ⣵⡄ ⢺⠂ ⠈⢸⢁ ⢸⢵⡄ ⣸⡗⢄
│ ⠠⡙⡅ ⠠⡘⡄⡄ ⢤⢧⠆ ⢌⠙ ⠠⡀ ⠠⢄⡀ ⠔⠆ ⠜⠁ ⠇ ⡀ ⢸⢴⡀ ⠸⡟⠆ ⠁⢿⢈ ⣇⢴⡄
-0.5 ┤ ⠓⡼⡜ ⠘⢝ ⠱⣀ ⢑⣴ ⠘⠓ ⢀⣀ ⡤⡆ ⢀⠝⠃ ⡇⠁⡀⢀⢇⢤⡆ ⡗⡝⢣ ⡏⡇⢘
│ ⠐⢄⣘⢄⡖⢄⠤⢧⡇⠢⣈⠙⠂⠢⢄⡀⢀⠐⠢⢤⣄⠐⠒⠲⠗ ⠒⠉⠁ ⠊ ⣀⠊ ⡤⡆⠘⠐⡝⠇⠘⢀⠎⠁⡀⢣⢃⣠⢆⢳⠓⡏⢆
-1.0 ┤ ⢀ ⠑⢍⢃⡀⠑⠢⡀⡄ ⢑⣴⣀ ⠘⠛⢂⣀ ⢀⣀⣀⣠⣄⣀⠤⠴⡖⡠⠔⠋⠃⡠⠊ ⠁⣀⠎⢀⣠⣴⠎⢒⠝⡇⡜⢁⠎⠘⡎⡸ ⠈
│ ⠑⠤⡤⢕⣯⠢⢍⠙⠋⠑⠢⢄⡠⡉⠒⢢⣦⡀⠉⠩⠟⠂ ⠈⠁ ⢀⣀⡀⢀⡲⡖ ⡨⠛⠏ ⡰⠁⠁⢀⠎ ⢀⠎ ⢠⠃
-1.5 ┤ ⠠⣀ ⠈⠢⣄⡆ ⠭⢮⣆ ⠐⠾⢗⣀⡀⠠⡤⠤⢄⣠⣦⡤⠔⢚⠷⠒⠊⠉⠟⠊⠁ ⠔⠉ ⠠⠊ ⠠⠃ ⠎ ⠎
│ ⠉⠢⢍⡑⠛⡑⠢⢄⡐⡍⠑⢒⣬⣆⠈⠩⠽⠓ ⠈⠁
-2.0 ┤ ⠬⠶⣵⡀⠒⠚⠛⠂
└┬─────────┬──────────┬──────────┬─────────┬──────────┬─────────┬
-3 -2 -1 0 1 2 3
x
```
## Scale
Millions of points, reduced to the screen, and the pixels still match.
### waveform
Ten million points through the auto-inserted M4 aggregation — pixel-identical to drawing every point, in tens of milliseconds.
Source: [examples/waveform.rs](examples/waveform.rs)
```text
10,000,000 points
7.5 ┤⣇⢸⡄⣧⢸⡆⣾ ⡇⢸ ⣧⢸⡆⣷⢰⡇⣼ ⡇⢸ ⣷⢰⡇⣾⢠⡇⣸ ⡇⢸⡆⣾⢠⡇⣸ ⡇⢸ ⣇⢸⡇⣸ ⡇⢸ ⣇⢸⡀⣧⢰⡇⢸ ⡇⢸⡀⣧⢸⡆⣷ ⡇
│⣿⢸⡇⣿⢸⡇⣿⢰⡇⣸ ⣿⢸⡇⣿⢸⡇⣿ ⡇⢸⡆⣿⢸⡇⣿⢸⡇⣿⡄⣷⢸⡇⣿⢸⡇⣿⣸⣷⣾⡇⣿⢸⡇⣿⢸⣧⣾⣦⣿⢸⡇⣿⢸⡇⣾⢠⣿⣸⡇⣿⢸⡇⣿⢸⡇
5.0 ┤⣿⣿⣷⣿⢸⡇⣿⢸⣧⣿⣶⣿⣼⡇⣿⢸⣇⣿⣾⣿⣼⡇⣿⢸⡇⣿⣾⣿⣿⣇⣿⢸⡇⣿⢸⣧⣿⣿⣿⣿⡇⣿⢸⡇⣿⢸⣿⣿⣿⣿⣾⡇⣿⢸⡇⣿⢸⣿⣿⣿⣿⢸⡇⣿⢸⣇
│⣿⣿⣿⣿⣼⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣧⣿⣿⣿⣿⣿⣿⣾⣇⣿⢸⣿⣿⣿⣿⣿⣧⣿⢸⡇⣿⣸⣿⣿⣿⣿⣿⡇⣿⢸⣧⣿⣿⣿⣿⣿⣿⣾⣧⣿⣾⣿
2.5 ┤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
0.0 ┤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
-2.5 ┤⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⡿⣿⢿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
│⣿⣿⡿⣿⢹⡇⣿⣿⣿⣿⣿⣿⢹⡇⣿⢸⡏⣿⣿⣿⣿⣿⣿⢸⡏⣿⢻⣿⣿⣿⣿⣿⡟⣿⢻⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⡿⣿⢹⣿⣿⣿⣿⣿⡿⣿⢻⡇⣿⣿⣿
-5.0 ┤⣿⢸⡇⣿⢸⡇⣿⢿⣿⣿⣿⣿⢸⡇⣿⢸⡇⣿⣿⣿⣿⡿⣿⢸⡇⣿⢸⡇⣿⣿⣿⢿⡇⣿⢸⡇⣿⢹⡿⣿⡟⣿⢸⡇⣿⢹⡿⣿⡟⣿⢹⡇⣿⢸⡟⣿⣿⣿⢹⡇⣿⢸⡇⣿⢻⣿
│⡟⢸⠇⣿⢸⡇⣿⢸⡟⣿⠿⣿⢸⡇⣿⢸⡇⣿⠻⣿⢻⡇⣿⢸⡇⣿⠸⡇⢻⡏⣿⢸⡇⣿⢸⡇⢿⠈⡇⢸⡇⣿⢸⡇⣿⢸⡇⢸ ⡿⢸⡇⣿⢸⡇⣿⢸⡏⢸⠇⣿⢸⡇⣿⢸⡏
-7.5 ┤⠇⢸ ⡿⠸⡇⢻⠈⡇⢸ ⡇⢸⠁⣿⠈⡇⢸ ⡇⢸⠁⡟⢸⠃⢿ ⡇⢸⠁⡏⢸⠃⡿⢸⠇⢸ ⡇⢸⠃⡿⢸⠇⢿⠸⡇⢸ ⡇⢸⠇⢿⠸⡇⢻⠈⡇⢸ ⡟⠸⡇⢻⠈⡇
└┬────────────┬────────────┬────────────┬────────────┬────────────┬
0 2.0M 4.0M 6.0M 8.0M 10.0M
```
### attention_full
A million attention weights reduced bucket-exactly onto a terminal: the same matrix mean-reduced and max-reduced side by side — the box filter dissolves the sparse long-range spikes that max keeps, the honesty gap per-bucket sampling would hide.
Source: [examples/attention_full.rs](examples/attention_full.rs)
```text
mean-reduced max-reduced
1000 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1000 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓█▓
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░░░░░░░░░░▓░░░░░░░░░░░░░░░▓█░░
900 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 900 ┤░░░░░░░░░░▓▓░░░░░░░░░░░░░▓█▓░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░░░░░░░░░▓░░░░░░░░░░░░▒█▓░░░░░
800 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 800 ┤░░░░░░░░░▓░░░░░░░░░░░░▓█░░░░░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░░░░░░░▓▓░░░░░░░░░░▓█▓░░░░░░░░
700 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 700 ┤░░░░░░░░▓░░░░░░░░░░█▓░░░░░░░░░░
600 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 600 ┤░░░░░░░▓░░░░░░░░░▓█▓░░░░░░░░░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░░░░░▓▓░░░░░░░▓█▓░░░░░░░░░░░░░
500 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 500 ┤░░░░░░▓░░░░░░░▓█░░░░░░░░░░░░░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░░░░▓░░░░░░▓█▓░░░░░░░░░░░░░░░░
400 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 400 ┤░░░░▓▓░░░░▒█▓░░░░░░░░░░░░░░░░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░░░▓░░░░▓█░░░░░░░░░░░░░░░░░░░░
300 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 300 ┤░░░▓░░░▓█▓░░░░░░░░░░░░░░░░░░░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░░▓▓░░█▓░░░░░░░░░░░░░░░░░░░░░░░
200 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 200 ┤░░▓░▓█▓░░░░░░░░░░░░░░░░░░░░░░░░
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │░▓▓█▓░░░░░░░░░░░░░░░░░░░░░░░░░░
100 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 100 ┤▓██░░░░░░░░░░░░░░░░░░░░░░░░░░░░
0 ┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0 ┤█▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
└┬──────────────┬──────────────┬ └┬──────────────┬──────────────┬
0 500 1000 0 500 1000
```
## Composition and style
Small multiples, fixed axes, and the glyph ladder.
### segments
Stacked and grouped bars, composed — never a preset: a base channel stacks each layer on the running total (the low half of stat::stack), and positioned bars sit side by side within their bands at the positions stat::dodge computes.
Source: [examples/segments.rs](examples/segments.rs)
```text
revenue by segment, stacked ($B, synthetic)
██ platform ██ services ██ hardware
10 ┤ █████████
│ ▆▆▆▆▆▆▆▆▆ █████████
8 ┤ ▁▁▁▁▁▁▁▁▁ █████████ █████████ █████████
│ █████████ █████████ █████████ █████████
6 ┤ █████████ █████████ █████████ █████████
│ █████████ █████████ █████████ █████████
│ █████████ █████████ █████████ █████████
4 ┤ █████████ █████████ █████████ █████████
│ █████████ █████████ █████████ █████████
2 ┤ █████████ █████████ █████████ █████████
│ █████████ █████████ █████████ █████████
0 ┤ █████████ █████████ █████████ █████████
└────────────────────────────────────────────────────
Q1 Q2 Q3 Q4
platform revenue, year over year ($B, synthetic)
██ 2025 ██ 2026
6 ┤ ▇▇▇▇
5 ┤ ▄▄▄▄▄ ▃▃▃▃▃ ████
│ ████ ▃▃▃▃ █████ █████ ████
4 ┤ ████ ▇▇▇▇ ████ ████ █████ █████ ████
│ ████ ████ ████ ████ ████ █████ █████ ████
3 ┤ ████ ████ ████ ████ ████ █████ █████ ████
2 ┤ ████ ████ ████ ████ ████ █████ █████ ████
│ ████ ████ ████ ████ ████ █████ █████ ████
1 ┤ ████ ████ ████ ████ ████ █████ █████ ████
0 ┤ ████ ████ ████ ████ ████ █████ █████ ████
└─────────────────────────────────────────────────────────
Q1 Q2 Q3 Q4
```
### speedup
Horizontal grouped bars: the bands run down the y axis, so long workload names take the measured label gutter; dodged positions per series, a vertical Rule at the 1.0× baseline. Rendered again as the README's SVG card by the same example.
Source: [examples/speedup.rs](examples/speedup.rs)
```text
speedup over Range<usize> (synthetic)
██ packed u64 ██ packed u32 ── baseline
│ ⡇
slice a buffer ┤███████████████████▋
│█████████████████████████▏
│██████████████████████████▌
iterate indices ┤████████████████████▉
│ ⡇
│████████████████████████████████████████▌
walk an adjacency list ┤█████████████████████████████████
│ ⡇
memo lookup ┤█████████████████▌ ⡇
│████████████████████▏
│ ⡇
random access ┤███████████████████████████████▎
│██████████████████████████████████████████████▌
│███████████████████████▊
sort ranges ┤██████████████████████████████▏
│ ⡇
└┬────────┬─────────┬────────┬─────────┬────────┬
0.0 0.5 1.0 1.5 2.0 2.5
×
```
### waffle
The pie's honest form: one hundred class cells on a ten-by-ten grid, axes off, shares rounded to whole cells the eye can count — Cells::classes from the grammar, no preset.
Source: [examples/waffle.rs](examples/waffle.rs)
```text
language share, one cell per percent (synthetic)
░░ rust ▒▒ go ▓▓ python ██ other
▓▓▓▓▓▓█████████████████████████████████████████████████
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
```
### breakdown
Breakdown bars: every region's sources as a horizontal 100 % stack through stat::stack_with under StackOffset::Normalize — each row's bands fill [0, 1], and a region with nothing to show draws nothing.
Source: [examples/breakdown.rs](examples/breakdown.rs)
```text
electricity by source, share of each region (synthetic)
██ hydro ██ wind ██ solar ██ gas
north ┤█████████████49%██████████████████21%█████████████24%█████
coast ┤█████████30%████████████22%█████████████████45%███████████
plains ┤██████████████████51%████████████████13%████████28%███████
island ┤██████11%████████████████████████82%██████████████████████
outage ┤
└┬──────────┬───────────┬──────────┬───────────┬──────────┬
0.0 0.2 0.4 0.6 0.8 1.0
share
```
### multiples
Small multiples: a Grid of independent plots, axes shared by fixing domains explicitly.
Source: [examples/multiples.rs](examples/multiples.rs)
```text
alpha beta
5 ┤ 5 ┤⠤⣀⡀ ⣀⡠⠤⠄
│ ⣀⣀⣀ ⣀⣀⣀ │ ⠈⠒⢄ ⢀⠤⠊
│ ⣀⠔⠉ ⠑⠢⡀ ⢀⠔⠊ ⠉⠢⣀ │ ⠑⠢⡀ ⢀⠤⠃
0 ┤⠜ ⠈⠢⡀ ⢀⠔⠊ ⠑⡄ 0 ┤ ⠑⢢ ⡠⠃
│ ⠈⠢⣀ ⣀⠔⠊ ⠈⠁ │ ⠑⢄ ⡠⠊
│ ⠉⠉⠉ │ ⠑⠤⡀ ⣀⡠⠊
-5 ┤ -5 ┤ ⠈⠉⠒⠒⠉
└┬─────┬──────┬─────┬──────┬─────┬ └┬─────┬──────┬─────┬──────┬─────┬
0 10 20 30 40 50 0 10 20 30 40 50
alpha dist beta dist
20 ┤ 10 ┤▃▃▃▃▃ ██████
│ ██████ │█████▁▁▁▁▁▁ ▁▁▁▁▁██████
│ ██████ │███████████ ▄▄▄▄▄▄███████████
10 ┤ ██████ 5 ┤███████████▇▇▇▇▇█████████████████
│▆▆▆▆▆ ▄▄▄▄▄▄▆▆▆▆▆██████ │█████████████████████████████████
│█████▆▆▆▆▆▆▆▆▆▆▆█████████████████ │█████████████████████████████████
0 ┤█████████████████████████████████ 0 ┤█████████████████████████████████
└──┬─────────────┬─────────────┬── └──┬─────────────┬─────────────┬──
-2.5 0.0 2.5 -5 0 5
```
### firstlook
A chart with its stat table — the same flippers as shape and as numbers, the box plot's own quartiles reappearing in the p50 column. No figure API: a plot renders to a String, so unequal panes are two renders printed in order at the same width.
Source: [examples/firstlook.rs](examples/firstlook.rs)
```text
flipper length by species (mm)
230 ┤ ▀▀▜▀▀▀
220 ┤ ▄▄▄▄▟▄▄▄▄▄
│ ━━━━━━━━━━
210 ┤ ▄▄▄▄▄▄ ▝▀▀▜▀▀▘ ▀▀▀▀▜▀▀▀▀▀
│ ▌ ▗▄▄▄▄▟▄▄▄▄▖ ▄▄▟▄▄▄
200 ┤ ▄▄▄▄▄▙▄▄▄▄ ▐━━━━━━━━━━
190 ┤ ━━━━━━━━━━ ▝▀▀▀▀▜▀▀▀▀▘
│ ▀▀▀▀▀▛▀▀▀▀ ▐
180 ┤ ▌ ▗▄▄▟▄▄▖
170 ┤ ▀▀▀▀▀▀
└───────────────────────────────────────────────────────────────────
Adelie Chinstrap Gentoo
Adelie ┤ 151 190.0 6.539 172 186 190 195 210
Chinstrap ┤ 68 195.8 7.132 178 191 196 201 212
Gentoo ┤ 123 217.2 6.485 203 212 216 221 231
└─────────────────────────────────────────────────────────────
count mean sd min p25 p50 p75 max
```
### corners
The asciichart homage: box-drawing corners, one glyph per column — with real axes underneath.
Source: [examples/corners.rs](examples/corners.rs)
```text
the corners style
15 ┤ ╭───────────╮
│ ╭─╯ ╰──╮
10 ┤ ╭─╯ ╰─╮
│ ╭─╯ ╰╮
5 ┤ ╭─╯ ╰─╮
│ ─╯ ╰─╮
0 ┤ ╰╮
│ ╰─╮
-5 ┤ ╰─╮
│ ╰─╮ ╭──
-10 ┤ ╰─╮ ╭─╯
│ ╰──╮ ╭───╯
-15 ┤ ╰───────╯
└┬──────────┬─────────┬──────────┬──────────┬──────────┬─────────┬
0 10 20 30 40 50 60
```
### charsets
The charset ladder: one curve at every subpixel density — solid blocks (octants, sextants, quadrants, half blocks), braille dots, and plain ASCII.
Source: [examples/charsets.rs](examples/charsets.rs)
```text
Octants — 2x4 solid blocks (Unicode 16, densest ink)
1 ┤ ▂▂▂▂ ▂▂▂▂▂
│ ▂ ▂🮂
│▗ ▂▂▂▂▂ ▖
0 ┤
│ 🮂▂ ▂🮂
-1 ┤ 🮂🮂🮂
└┬─────┬─────┬─────┬─────┬──────┬─────┬─────┬─────┬─────┬
0 1 2 3 4 5 6 7 8 9
Sextants — 2x3 solid blocks (Unicode 13)
1 ┤ 🬭🬭🬭🬭 🬞🬭🬭🬭
│ 🬞🬖🬂🬂 🬂🬈🬋🬭 🬭🬖🬅🬂🬀 🬂🬂🬢🬭
│🬞🬅🬀 🬂🬈🬢🬭🬭🬭🬭🬭🬖🬋🬂 🬈🬏
0 ┤🬀 🬁🬂🬢 🬖🬋🬃
│ 🬂🬋🬭🬏 🬞🬭🬖🬅🬂
-1 ┤ 🬁🬂🬂🬂🬀
└┬─────┬─────┬─────┬─────┬──────┬─────┬─────┬─────┬─────┬
0 1 2 3 4 5 6 7 8 9
Quadrants — 2x2 solid blocks (the conservative UTF-8 default)
1 ┤ ▄▄▄▄ ▗▄▄▄
│ ▗▄▀▀ ▀▀▄▄ ▄▄▀▀▘ ▀▀▄▄
│▗▀▘ ▀▀▄▄▄▄▄▄▄▞▀ ▚▖
0 ┤▘ ▝▀▄ ▗▄▀▘
│ ▀▚▄▄ ▄▄▞▀▘
-1 ┤ ▀▀▀
└┬─────┬─────┬─────┬─────┬──────┬─────┬─────┬─────┬─────┬
0 1 2 3 4 5 6 7 8 9
Half blocks — 1x2
1 ┤ ▄▄▄▄ ▄▄▄▄
│ ▄▄█▀▀ ▀▀█▄ ▄▄▀▀▀ ▀▀▄▄
│ █▀ ▀▀▄▄▄▄▄▄▄█▀ █▄
0 ┤▀ ▀▄ ▄▄▀
│ ▀█▄▄ ▄▄▀▀
-1 ┤ ▀▀▀
└┬─────┬─────┬─────┬─────┬──────┬─────┬─────┬─────┬─────┬
0 1 2 3 4 5 6 7 8 9
Braille — 2x4 dots (dense opt-in)
1 ┤ ⢀⣀⣀⣀⣀⡀ ⣀⣀⣀⣀⣀
│ ⢀⠔⠒⠁ ⠈⠒⠤⣀ ⣀⠤⠊⠉ ⠑⠢⢄
│⢠⠊⠁ ⠑⠒⠤⣀⣀⣀⣀⣀⠤⠔⠊ ⠑⡄
0 ┤⠁ ⠈⠑⢄ ⡠⠤⠂
│ ⠉⠢⣀⡀ ⢀⣀⠤⠊⠉
-1 ┤ ⠈⠉⠉⠉⠁
└┬─────┬─────┬─────┬─────┬──────┬─────┬─────┬─────┬─────┬
0 1 2 3 4 5 6 7 8 9
ASCII — 1x1, the guaranteed fallback
1 +
| *********** **********
| ** ************* ***
0 +* *** ***
| **********
-1 +
++-----+-----+-----+-----+------+-----+-----+-----+-----+
0 1 2 3 4 5 6 7 8 9
```