#plot #multi-platform #grammar #graphics #user #implemented #pure

gguppy

A multi-platform plotting library based on the grammar of graphics implemented in pure Rust with a no_std feature

1 unstable release

0.1.0 Feb 23, 2024

#136 in Visualization

Apache-2.0 OR MIT

71KB
590 lines

gguppy

gguppy is a multi-platform plotting library based on the grammar of graphics implemented in pure Rust with a no_std feature. Write once, plot anywhere.

Why gguppy?

1. Friendly syntax

Rust is strange for python and R users. gguppy aims to provide a familiar, friendly and ergonomic syntax. You can even write in different coding styles.

Grammar of graphics is a first class citizen in gguppy:

use gguppy::prelude::*

df = minidf!["x" => &[1, 2, 3], "y" => &[4, 5, 6]]
plot = ggplot![df, aes("x", "y")] + geom_point![]

A MATLAB/matplotlib-esque syntax will also be supported.

2. Batteries included

gguppy aims to allow you to write once, plot anywhere using its flexible and extensible architecture.

3. Speed

Workspace Structure

Crates

  • ๐Ÿ› ๏ธ gguppy_core

    • ๐Ÿ› ๏ธ Implementation of the grammer of graphics in no_std Rust
    • ๐Ÿ› ๏ธ Consumes any dataframe-like structure implementing the GGData trait
    • ๐Ÿ› ๏ธ Extensible with any plot types implementing the GGCapable trait
    • ๐Ÿ› ๏ธ Produces geometric primitives implementing the DrawablePrim trait
    • ๐Ÿ› ๏ธ Compiles for static desktop display or interactive wasm plots
  • ๐Ÿ› ๏ธ gguppy_data

    • ๐Ÿ› ๏ธ Minimalist dataframe minidf plottable by gguppy in no_std Rust
    • ๐Ÿ› ๏ธ Features adapters for arrow and arrow2
    • ๐Ÿ› ๏ธ Features adapters for polars, pandas, and more
  • ๐Ÿ› ๏ธ arwggplot

    • ๐Ÿ› ๏ธ Minimalist svg backend for gguppy in no_std Rust
    • ๐Ÿ› ๏ธ Features vector backends to svg, eps, and more
    • ๐Ÿ› ๏ธ Features raster backends to bmp, png, and more

Module Layout

  • src

Layout

  • Board (dashboard, drawing board, canvas, etc.) := matplotlib figure, ggplot2 plot

    • size
    • layout
    • can be turned into an entire dashboard, or powerpoint slide, or engineering printout with titleblock
  • Chart := matplotlib axes / subplot

  • Panel := ggplot2 panel / facet

Elements

Inspiration

Dependencies