Skip to main content

Boxplot

Struct Boxplot 

Source
pub struct Boxplot { /* private fields */ }
Expand description

Draw a box and whisker plot

Each box shows the median, quartiles (Q1/Q3), and whiskers (default: 1.5 × IQR). Outlier points (fliers) are drawn beyond the whiskers.

Two data formats are supported:

  • Nested list (via draw): one box per sub-array (variable group sizes)
  • 2D matrix (via draw_mat): one box per column (equal group sizes)

See Matplotlib’s documentation

§Examples

§Data as a nested list

use plotpy::{Boxplot, Plot, StrError};

fn main() -> Result<(), StrError> {
    // data (as a nested list)
    let data = vec![
        vec![1, 2, 3, 4, 5],              // A
        vec![2, 3, 4, 5, 6, 7, 8, 9, 10], // B
        vec![3, 4, 5, 6],                 // C
        vec![4, 5, 6, 7, 8, 9, 10],       // D
        vec![5, 6, 7],                    // E
    ];

    // x ticks and labels
    let n = data.len();
    let ticks: Vec<_> = (1..(n + 1)).into_iter().collect();
    let labels = ["A", "B", "C", "D", "E"];

    // boxplot object and options
    let mut boxes = Boxplot::new();
    boxes.draw(&data);

    // save figure
    let mut plot = Plot::new();
    plot.add(&boxes)
        .set_title("boxplot documentation test")
        .set_ticks_x_labels(&ticks, &labels)
        .save("/tmp/plotpy/doc_tests/doc_boxplot_2.svg")?;
    Ok(())
}

doc_boxplot_2.svg

§Data as a 2D array

use plotpy::{Boxplot, Plot, StrError};

fn main() -> Result<(), StrError> {
    // data (as a 2D array/matrix)
    let data = vec![
        //   A  B  C  D  E
        vec![1, 2, 3, 4, 5],
        vec![2, 3, 4, 5, 6],
        vec![3, 4, 5, 6, 7],
        vec![4, 5, 6, 7, 8],
        vec![5, 6, 7, 8, 9],
        vec![6, 7, 8, 9, 10],
        vec![14, 14, 14, 14, 14], // fliers
    ];

    // x ticks and labels
    let ncol = data[0].len();
    let ticks: Vec<_> = (1..(ncol + 1)).into_iter().collect();
    let labels = ["A", "B", "C", "D", "E"];

    // boxplot object and options
    let mut boxes = Boxplot::new();
    boxes.draw_mat(&data);

    // save figure
    let mut plot = Plot::new();
    plot.add(&boxes)
        .set_title("boxplot documentation test")
        .set_ticks_x_labels(&ticks, &labels)
        .save("/tmp/plotpy/doc_tests/doc_boxplot_1.svg")?;
    Ok(())
}

doc_boxplot_1.svg

§More examples

See also integration test in the tests directory.

Implementations§

Source§

impl Boxplot

Source

pub fn new() -> Self

Creates a new Boxplot object

Source

pub fn draw<T>(&mut self, data: &Vec<Vec<T>>)
where T: Display + Num,

Draws the box plot given a nested list of values

Each inner Vec produces one box. Groups can have different sizes.

§Input
  • data – a sequence of 1D arrays; one box is drawn per sub-array

See also: draw_mat for matrix-oriented data

Source

pub fn draw_mat<'a, T, U>(&mut self, data: &'a T)
where T: AsMatrix<'a, U>, U: 'a + Display + Num,

Draws the box plot given a 2D matrix of values

Each column of the matrix produces one box. All groups must have the same number of rows (unlike draw which allows variable sizes).

§Input
  • data – a 2D matrix (rows = observations, columns = groups)
Source

pub fn set_symbol(&mut self, symbol: &str) -> &mut Self

Sets the marker symbol for outlier points (fliers)

Example: "b+" for blue crosses, "rx" for red x-marks.

Source

pub fn set_horizontal(&mut self, flag: bool) -> &mut Self

Enables drawing horizontal boxes instead of vertical

When true, the boxplot is rotated 90° clockwise so categories appear on the y-axis.

Source

pub fn set_whisker(&mut self, whisker: f64) -> &mut Self

Sets the position of the whiskers

The default value of whisker = 1.5 corresponds to Tukey’s original definition of boxplots.

See Matplotlib’s documentation

Source

pub fn set_positions(&mut self, positions: &[f64]) -> &mut Self

Overrides the default x-axis positions of the boxes

By default boxes are placed at sequential integer positions (1, 2, 3, …). Use this to spread or group boxes at custom locations.

Source

pub fn set_width(&mut self, width: f64) -> &mut Self

Sets the width of each box (default: 0.5)

Source

pub fn set_no_fliers(&mut self, flag: bool) -> &mut Self

Hides outlier points (fliers) when true

Outliers are data points beyond 1.5 × IQR from the quartiles.

Source

pub fn set_patch_artist(&mut self, flag: bool) -> &mut Self

Enables Patch artist drawing so boxes can be filled with color

By default Matplotlib uses Line2D to draw boxes. Setting this to true allows set_boxprops to fill boxes with color.

Source

pub fn set_medianprops(&mut self, props: &str) -> &mut Self

Sets the median line properties as a Python dict string

Example: "{'color': 'red', 'linewidth': 2}"

See Matplotlib’s documentation

Source

pub fn set_boxprops(&mut self, props: &str) -> &mut Self

Sets the box body properties as a Python dict string

Requires set_patch_artist(true). Example: "{'facecolor': 'lightblue', 'edgecolor': 'black'}"

Source

pub fn set_whiskerprops(&mut self, props: &str) -> &mut Self

Sets the whisker line properties as a Python dict string

Example: "{'linestyle': '--', 'color': 'gray'}"

Source

pub fn set_extra(&mut self, extra: &str) -> &mut Self

Sets extra matplotlib commands (comma separated)

Important: The extra commands must be comma separated. For example:

param1=123,param2='hello'

See Matplotlib’s documentation for extra parameters

Trait Implementations§

Source§

impl GraphMaker for Boxplot

Source§

fn get_buffer<'a>(&'a self) -> &'a String

Returns the text buffer with Python3 commands
Source§

fn clear_buffer(&mut self)

Clear the text buffer with Python commands

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.