termplot

An extensible plotting library for CLI applications.

termplot.rs logo

Documentation

Find the full documentation on doc.rs

Quick start

To use termplot, add the crate to your Cargo.toml. toml [dependencies] termplot = "0.1.0"

Examples

Plotting a function

Here is a quick example of what plotting sin(x) / x looks like.

```rust use termplot::*;

let mut plot = Plot::default(); plot.setdomain(Domain(-10.0..10.0)) .setcodomain(Domain(-0.3..1.2)) .settitle("Graph title") .setxlabel("X axis") .setylabel("Y axis") .setsize(Size::new(50, 25)) .add_plot(Box::new(plot::Graph::new(|x| x.sin() / x)));

println!("{plot}"); ``` Output of the previous example:

Simple example (plotting)

Historigram

```rust use termplot::*; use rand::Rng;

let mut rng = rand::threadrng(); let values: Vec = (0..100).map(|| rng.gen_range(0.0f64..10.0f64)).collect();

let mut plot = Plot::default();

plot.setdomain(Domain(0.0..11.0)) .setcodomain(Domain(0.0..45.0)) .settitle("Graph title") .setxlabel("X axis") .setylabel("Y axis") .setsize(Size::new(50, 25)) .add_plot(Box::new(plot::Historigram::new( values, vec![0.0..2.0, 2.0..4.0, 4.0..6.0, 6.0..8.0, 8.0..10.0], )));

println!("{plot}"); ``` Output of the previous example:

Historigram example

Composing multiple plots

It is also possible to compose multiple plots:

```rust use termplot::*; use rand::Rng;

let mut rng = rand::threadrng(); let values: Vec = (0..100).map(|| rng.gen_range(0.0f64..10.0f64)).collect();

let mut plot = Plot::default();

plot.setdomain(Domain(0.0..11.0)) .setcodomain(Domain(0.0..45.0)) .settitle("Graph title") .setxlabel("X axis") .setylabel("Y axis") .setsize(Size::new(50, 25)) .addplot(Box::new(plot::Historigram::new( values, vec![0.0..2.0, 2.0..4.0, 4.0..6.0, 6.0..8.0, 8.0..10.0], ))) .addplot(Box::new(plot::Graph::new(|x| { -2.0 * (x - 5.0).powf(2.0) + 40.0 })));

println!("{plot}"); ```

Output of the previous example:

Composed plot example

License

MIT - Enjoy!