graplot

Crates.io version Docs

'graplot' is an experimental plotting library written in Rust that is based on [macroquad] (internally [litequad]). It creates a window displaying the graphs.

Installation

Add 'graplot' as a dependency: toml [dependencies] graplot = "0.1.20"

[Examples]

```rust use graplot::Plot;

let plot = Plot::new([-4., -2., 1., 4.]); plot.show(); ```

plot1

3D line plot:

```rust use graplot::Plot3D;

let xs = [0.,1.,2.,3.,4.,5.,6.]; let ys = [0.,1.,4.,9.,16.,25.,36.]; let zs = [0.,1.,4.,9.,16.,25.,36.];

// move with: W, A, S, D let plot = Plot3D::new((xs, ys, zs, "r-o")); plot.show(); ```

3d line plot

Multiple graphs: ```rust use graplot::Plot;

let xs = [1., 2., 3.,]; let ys = [1.7, 3., 1.9];

let ys1 = [1.4, 1.6, 1.5];

let ys2 = [0.9, 1.2, 1.7, 1.9, 2.];

let mut plot = Plot::new((xs, ys)); plot.add((xs, ys1, "c-o")); plot.add((ys2, "r-")); plot.show(); ```

multiple graphs

Label the x and y axis and set a title:

```rust use graplot::{x, Plot};

let mut plot = Plot::new((|x: f64| x.cos(), x(6.)));

plot.set_title("cosine wave");

plot.setxlabel("x axis"); plot.setylabel("y axis"); plot.show(); ``` cosine labeled

[Collatz Conjecture]:

collatz conjecture

Draw pie charts:

```rust use graplot::Pie;

// without labels: let pie = Pie::new([35., 25., 25., 15.]); let draw = [(35., "label"), (25., "len"), (25., "labeled"), (15., "test")]; let pie = Pie::new(draw); pie.show(); ``` pie chart

Sine wave: ```rust use graplot::Plot;

let mut xs = [0.; 1000];

let mut add = 0f64; for idx in 0..1000 { xs[idx] = add/1000.; add += 1.; }

let mut ys = [0.; 1000]; for (i, y) in ys.iter_mut().enumerate() { *y = (2. * std::f64::consts::PI * xs[i]).sin(); } // or alternatively: let plot = Plot::new((|x: f64| x.sin(), x(4.))); let plot = Plot::new((xs, ys)); plot.show(); ```

Sinewave

x³ + x² - 0.08: ```rust use graplot::{Plot, x};

// x(...) ... sets the absolute max value for x let plot = Plot::new((|x: f64| x.powf(3.) + x.powf(2.) - 0.08, x(1.)) ); plot.show(); ``` pol3

x² - 0.5: ```rust use graplot::Plot;

let plot = Plot::new(|x: f64| x.powf(2.) - 0.5); plot.show(); ``` squared

Use the Polynomial struct or polynomial() function to create a polynomial function that runs through all given points:

```rust use graplot::{x, Plot, Polynomial};

let poly = Polynomial::new(&[2., 3., 1.], &[2., 3., 2.]); let plot = Plot::new((poly, x(10.))); plot.show(); ```

polynomial functions runs through 3 points

Draw bar graphs:

```rust use graplot::Bar;

let mut bar = Bar::new(["Ferris", "Stefan", "Test"], &[100., 200., 700.]); bar.settitle("title"); bar.setxlabel("test"); bar.show(); ```

bar graph

Using a line description: (matplotlib)

```rust use graplot::Plot;

// c ... cyan color, - ... solid line, o ... ring marker let plot = Plot::new(([-4., -3., -3.4, -3.75, -4.1], "c-o")); plot.show(); ``` line_desc

Custom scaling:

```rust use graplot::{Desc, Plot, x};

let mut plot = Plot::new((|x: f64| x.cos(), x(2.))); plot.setdesc(Desc { minstepsx: 6., spacingx: 47., ..Default::default() }); plot.show(); ```

Spawning multiple windows on linux (currently not working):

```rust let mut plot = Plot::new(|x: f64| x.powf(3.) + x.powf(2.) - 0.08); plot.settitle("x^3 + x^2 - 0.08"); let h = plot.showthreaded() // show_threaded() is currently linux only;

let mut plot = Plot::new(|x: f64| x.powf(2.) + 0.08); plot.set_title("x²"); plot.show();

h.join().unwrap() // you need to close both windows ```

multiple windows

Changelog