kuva
kuva is a scientific plotting library for Rust that renders plots to SVG. It targets bioinformatics use cases and ships with 25 specialised plot types — from standard scatter and bar charts to Manhattan plots, UpSet plots, phylogenetic trees, and synteny diagrams. A kuva CLI binary lets you render plots directly from the shell without writing any Rust.
Design
The API follows a builder pattern. Every plot type is constructed with ::new(), configured with method chaining, and rendered through a single pipeline:
plot struct → Plot enum → Layout → SVG / PNG / PDF
Quick start
#![allow(unused)] fn main() { use kuva::prelude::*; let data = vec![(1.0_f64, 2.0_f64), (3.0, 5.0), (5.0, 4.0)]; let plot = ScatterPlot::new() .with_data(data) .with_color("steelblue") .with_size(5.0); let plots: Vec<Plot> = vec![plot.into()]; let layout = Layout::auto_from_plots(&plots) .with_title("My Plot") .with_x_label("X") .with_y_label("Y"); let svg = render_to_svg(plots, layout); std::fs::write("my_plot.svg", svg).unwrap(); }
Prelude
use kuva::prelude::* brings all 25 plot structs, Plot, Layout, Figure, Theme, Palette, render_to_svg, and everything else you typically need into scope in one line.
Every plot struct implements Into<Plot>, so you can write plot.into() instead of Plot::Scatter(plot).
For PNG or PDF output, use render_to_png and render_to_pdf (require feature flags png and pdf respectively):
#![allow(unused)] fn main() { use kuva::prelude::*; let plots: Vec<Plot> = vec![/* ... */]; let layout = Layout::auto_from_plots(&plots); // SVG — always available let svg: String = render_to_svg(plots, layout); // PNG — feature = "png" let png: Vec<u8> = render_to_png(plots, layout, 2.0).unwrap(); // PDF — feature = "pdf" let pdf: Vec<u8> = render_to_pdf(plots, layout).unwrap(); }
Regenerating documentation assets
The SVG images embedded in these docs are generated by standalone example programs in the examples/ directory. Regenerate all assets at once with:
bash scripts/gen_docs.sh
Or regenerate a single plot type:
cargo run --example scatter
cargo run --example histogram
# etc. — one example per plot type in examples/
Building the book
Install mdBook, then:
mdbook build docs # produce docs/book/
mdbook serve docs # live-reload preview at http://localhost:3000