gguppy 0.1.0

A multi-platform plotting library based on the grammar of graphics implemented in pure Rust with a no_std feature.
Documentation
# 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*.

<!-- - Multi-platform: desktop โœ… and web (wasm) ๐Ÿ› ๏ธ -->

<!-- - Multi-data format: arrow, arrow2, polars, pandas, etc. -->

<!-- - Multi-backends: SVG โœ…, PNG, PDF, etc. -->

<!-- - Multi-coordinate systems: 2D, 3D, polar, cylindrical, spherical, etc. -->


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

<!-- todo -->


### 2. Batteries included


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

<!-- todo -->


### 3. Speed


<!-- todo -->


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


<!-- To be replaced -->


<!-- ![ggplot2-theme-elements-reference-v2_hu8994090e1960a0a71878a3756da20076_580819_2000x2000_fit_lanczos_2.png (2000ร—1250) (isabella-b.com)](https://isabella-b.com/blog/ggplot2-theme-elements-reference/ggplot2-theme-elements-reference-v2_hu8994090e1960a0a71878a3756da20076_580819_2000x2000_fit_lanczos_2.png) -->


<!-- ![Monash UAS](https://raw.githubusercontent.com/alwinw/alwinw/master/images/Alwin.svg) -->


- 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