Skip to content

1.16.0 (Red Square)

Latest

Choose a tag to compare

@shergin shergin released this 15 Aug 20:00

Color speaks data. One categorical channel, a curated color vocabulary, a
least-squares stat, and one shared reducer close the gaps between malevich
and the charts science asks for first — and the CLI grows a bridge out of
the shell. Everything is additive, and the re-measured render baseline came
out slightly faster than 1.15.

  • One vocabulary for every aggregation: stat::ReducerCount, Sum,
    Mean, Median, Min, Max, Percentile(q) (type-7, exactly the box
    plot's estimator) — is now what Agg::reduce and Window::reduce take
    (their named methods are sugar over it), what the new stat::binned uses to
    reduce a paired series per histogram bin, and what stat::quantiles
    evaluates in batch over one sort. Rolling p95s, per-group percentiles,
    binned medians, and Q–Q plots (see the gallery) all fall out with no new
    API shapes.
  • The line of best fit: stat::Fit is streaming ordinary least squares —
    bivariate Welford accumulation, mergeable like every other aggregator, with
    slope, intercept, R², prediction, and the standard error of the mean
    response. The trend preset draws a scatter with its fitted line;
    trend_with adds a confidence band around the mean response through the
    existing band mark, at a caller-chosen standard-error multiplier. Measured:
    one million pairs fit in ~5 ms single-threaded (BENCHMARKS.md).
  • Interval polish: error_bars_asymmetric(x, y, minus, plus) covers two-sided
    deviations, and ecdf_with grows the Dvoretzky–Kiefer–Wolfowitz confidence
    band as a checked option — both compositions of existing marks, both proven
    equal to their grammar expansions.
  • Color speaks data: color_by(categories) on Line, Points, Bars, and
    Range colors a layer by a categorical series. Distinct categories (first
    appearance first) take colors from the new scale::Palette — Okabe–Ito by
    default, colorblind-safe, replaceable with Plot::palette — and name
    themselves in the legend. In colorless output the default point markers cycle
    shapes per category, so groups separate in a pipe as well as a terminal. The
    channel is proven bit-identical to its masked-layer expansion; grouped
    scatter, volcano, Manhattan, and candlestick compositions join the gallery.
  • PointStyle gains portable Asterisk (*) and Circle (o) markers, in
    cells and as geometric pixel shapes; the ASCII legend swatch for Dot is now
    .., freeing ** for the asterisk.
  • Colormap grows a curated named set — sequential VIRIDIS (the default,
    now named), MAGMA, CIVIDIS, GREYS and diverging RED_BLUE,
    PURPLE_ORANGE — selected to stay distinguishable after the 256- and
    16-color quantizers, with Colormap::named resolving the canonical names
    for CLIs and configuration.
  • Colormap::centered_at(mid) anchors a map to a data midpoint: signed and
    centered data (correlations, log fold changes) renders with the neutral
    color at the midpoint and the value range spanned symmetrically, and the
    colorbar labels the symmetric span. heatmap_with joins the checked _with
    presets so heatmaps take a colormap without abandoning the one-call default;
    the correlation example now demonstrates the honest encoding.
  • The control-character-dropping behavior of the cell grid is now a stated,
    regression-tested contract: hostile escape bytes in titles, labels, categories,
    or annotations can never reach ANSI, plain, or HTML output.

Also released: malevich-cli 0.2.0 (kaz) with --emit-code, --cols, --by, --colormap, and --midpoint (tag cli-v0.2.0).

Full changelog: CHANGELOG.md · crates.io: malevich 1.16.0