Skip to content

Latest commit

 

History

History
1427 lines (1248 loc) · 109 KB

EXAMPLES.md

File metadata and controls

1427 lines (1248 loc) · 109 KB

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

                        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

            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

                       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

                 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

                                 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

                 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

          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

         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

               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

           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

                 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

                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

         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

                   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

                        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

                      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

     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

                  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

                        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

                       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

                    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

                     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

                        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

                    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

                      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

                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

       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

                      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

                       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

             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

                    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

           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

                   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

                    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

            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

                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

                           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

              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

                           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

                       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

                        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

                           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

            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

      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

                 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

    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

     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

                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

                     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

                          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

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