use crate::data::IntoSeries;
use crate::mark::{Bars, Line, Points};
use crate::plot::Plot;
pub fn line<'a>(values: impl IntoSeries<'a>) -> Plot<'a> {
Plot::new().layer(Line::y(values))
}
pub fn scatter<'a>(x: impl IntoSeries<'a>, y: impl IntoSeries<'a>) -> Plot<'a> {
Plot::new().layer(Points::xy(x, y))
}
pub fn bar<'a>(
categories: impl IntoIterator<Item = impl Into<String>>,
values: impl IntoSeries<'a>,
) -> Plot<'a> {
Plot::new().layer(Bars::new(categories, values))
}
pub fn hist<'a>(values: impl IntoSeries<'a>) -> Plot<'a> {
let series = values.into_series();
match crate::stat::Bins::auto(series.as_slice(), 60) {
Some(bins) => {
let counts: Vec<f64> = bins.counts().iter().map(|&count| count as f64).collect();
Plot::new().layer(Bars::spans(bins.start(), bins.width(), counts))
}
None => Plot::new(),
}
}