# termplot An _extensible_ plotting library for CLI applications. termplot.rs logo - [Quick Start](#quick-start) - [Documentation](#documentation) - [Examples](#examples) + [Plotting a function](#plotting-a-function) + [Historigram](#historigram) + [Composing multiple plots](#composing-multiple-plots) ## Documentation Find the full documentation on [doc.rs](https://docs.rs/termplot/latest/termplot) ## 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.set_domain(Domain(-10.0..10.0)) .set_codomain(Domain(-0.3..1.2)) .set_title("Graph title") .set_x_label("X axis") .set_y_label("Y axis") .set_size(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::thread_rng(); let values: Vec = (0..100).map(|_| rng.gen_range(0.0f64..10.0f64)).collect(); let mut plot = Plot::default(); plot.set_domain(Domain(0.0..11.0)) .set_codomain(Domain(0.0..45.0)) .set_title("Graph title") .set_x_label("X axis") .set_y_label("Y axis") .set_size(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::thread_rng(); let values: Vec = (0..100).map(|_| rng.gen_range(0.0f64..10.0f64)).collect(); let mut plot = Plot::default(); plot.set_domain(Domain(0.0..11.0)) .set_codomain(Domain(0.0..45.0)) .set_title("Graph title") .set_x_label("X axis") .set_y_label("Y axis") .set_size(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], ))) .add_plot(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!