Skip to content

Repository files navigation

graplot

Crates.io versionDocs

'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:

[dependencies]
graplot = "0.1.22"
use graplot::Plot;let plot = Plot::new([-4., -2.,1.,4.]);
plot.show();

first plot example

3D line plot:

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, Dlet plot = Plot3D::new((xs, ys, zs,"r-o"));
plot.show();

3d line plot example

Multiple graphs:

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.];letmut 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:

use graplot::{x,Plot};letmut plot = Plot::new((|x:f64| x.cos(),x(6.)));
plot.set_title("cosine wave");
plot.set_xlabel("x axis");
plot.set_ylabel("y axis");
plot.show();

cosine labeled

Collatz Conjecture:

collatz conjecture

Draw pie charts:

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:

use graplot::Plot;letmut xs = [0.;1000];letmut add = 0f64;for idx in0..1000{
xs[idx] = add/1000.;
add += 1.;}letmut 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();

sine wave example

x³ + x² - 0.08:

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:

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

x squared example

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

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:

use graplot::Bar;letmut bar = Bar::new(["Ferris","Stefan","Test"],&[100.,200.,700.]);
bar.set_title("title");
bar.set_xlabel("test");
bar.show();

bar graph

Using a line description: (matplotlib)

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

line desc example

Draw graphs with nodes and egdes:

use graplot::{Graph,RED, graph::GraphDesc,Color};letmut graph = Graph::new();
graph.graph_desc = GraphDesc{node_color:RED,outer_ring:(Color::new(1.,0.5,0.8,1.),3.5),
..Default::default()};let a = graph.add_node(vec![]);let b = graph.add_node(vec![]);let c = graph.add_node(vec![]);let d = graph.add_node(vec![a.idx, b.idx]);let e = graph.add_node(vec![a.idx, c.idx]);
graph.add_node(vec![d.idx, e.idx, b.idx]);
graph.show();

graph

Custom scaling:

use graplot::{Desc,Plot, x};letmut plot = Plot::new((|x:f64| x.cos(),x(2.)));
plot.set_desc(Desc{min_steps_x:6.,spacing_x:47.,
..Default::default()});
plot.show();

Spawning multiple windows on linux (currently not working):

letmut plot = Plot::new(|x:f64| x.powf(3.) + x.powf(2.) - 0.08);
plot.set_title("x^3 + x^2 - 0.08");let h = plot.show_threaded()// show_threaded() is currently linux only;letmut 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

  • 0.1.22: added ToF64
  • 0.1.22: added graphs (nodes, edges)
  • 0.1.19: negative value bars
  • 0.1.18: bugfixes
  • 0.1.17: basic 3d plotting
  • 0.1.16: coloring,
  • 0.1.15: easier colored bars
  • 0.1.14: ???
  • 0.1.13: added pie charts
  • 0.1.12: added bar graphs
  • 0.1.11: added scatter plots
  • 0.1.10: create polynomial functions with a set of points
  • 0.1.9: fixed bug
  • 0.1.8: set color now uses 3 args, fixed step size
  • 0.1.7: Set graph color, custom x & y "line" spacing and step size | "custom scaling"
  • 0.1.6: Label x axis, litequad
  • 0.1.5: y axis, set title, /mutliple windows on linux/ | yanked
  • 0.1.4: Multiple graphs

Releases

Packages

Used by

Contributors

Languages