# 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)