# 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: ```rust 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](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](crates/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](crates/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** - [lib.rs](src/lib.rs) - `mod` and `re-export` - [prelude.rs](src/prelude.rs) - `use` statements for the entire library ## 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 - Grammar of Graphics - [tidyverse/ggplot2: An implementation of the Grammar of Graphics in R (github.com)](https://github.com/tidyverse/ggplot2) - [JetBrains/lets-plot: Multiplatform plotting library based on Grammar of Graphics (github.com)](https://github.com/JetBrains/lets-plot) - [has2k1/plotnine: A Grammar of Graphics for Python (github.com)](https://github.com/has2k1/plotnine) - Rust drawing library - [plotters-rs/plotters: A rust drawing library for high quality data plotting for both WASM and native, statically and realtimely (github.com)](https://github.com/plotters-rs/plotters) - SVG composing and rendering - [bodoni/svg: Composer and parser for SVG (github.com)](https://github.com/bodoni/svg) - [RazrFalcon/resvg: An SVG rendering library. (github.com)](https://github.com/RazrFalcon/resvg) - Text rendering - [Text rendering ยท Issue #1 ยท RazrFalcon/tiny-skia (github.com)](https://github.com/RazrFalcon/tiny-skia/issues/1) - Mathematical functions - [At0micBee/scilib: A rust crate for mathematics and science (github.com)](https://github.com/At0micBee/scilib)