mod bins;
mod crossplot;
mod distribution;
mod regression;
mod tornado;
pub use crossplot::{crossplot_chart, ScatterInput};
pub use distribution::{distribution_panel, DistMarkers};
pub use tornado::tornado_chart;
use serde::Serialize;
use serde_json::Value;
#[derive(Debug, Clone, Serialize)]
pub struct TornadoChart {
pub mark: &'static str,
pub title: String,
pub units: String,
pub base: f64,
pub bars: Vec<TornadoBarOut>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fold_count: Option<usize>,
}
#[derive(Debug, Clone, Serialize)]
pub struct TornadoBarOut {
pub param: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub in_lo: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub in_hi: Option<f64>,
pub out_lo: f64,
pub out_hi: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub out_min: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub out_max: Option<f64>,
pub swing: f64,
}
#[derive(Debug, Clone, Serialize)]
pub struct ScatterChart {
pub mark: &'static str,
pub title: String,
pub x: Axis,
pub y: Axis,
#[serde(skip_serializing_if = "Option::is_none")]
pub color_by: Option<ColorBy>,
pub groups: Vec<String>,
pub points: Vec<ScatterPoint>,
pub trends: Vec<Trend>,
}
#[derive(Debug, Clone, Serialize)]
pub struct Axis {
pub name: String,
pub units: String,
pub log: bool,
}
#[derive(Debug, Clone, Serialize)]
pub struct ColorBy {
pub name: String,
pub kind: &'static str, #[serde(skip_serializing_if = "Option::is_none")]
pub range: Option<Range>,
#[serde(skip_serializing_if = "Option::is_none")]
pub units: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct ScatterPoint {
pub x: f64,
pub y: f64,
pub c: Value,
}
#[derive(Debug, Clone, Serialize)]
pub struct Trend {
#[serde(skip_serializing_if = "Option::is_none")]
pub group: Option<String>,
pub kind: &'static str, pub x0: f64,
pub y0: f64,
pub x1: f64,
pub y1: f64,
pub slope: f64,
pub intercept: f64,
pub r2: f64,
pub equation: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct DistributionPanel {
pub mark: &'static str,
pub title: String,
pub units: String,
pub series: Vec<DistSeries>,
}
#[derive(Debug, Clone, Serialize)]
pub struct DistSeries {
pub name: String,
pub bins: Vec<Bin>,
pub cdf: Vec<CdfPoint>,
pub markers: Markers,
}
#[derive(Debug, Clone, Serialize)]
pub struct Bin {
pub lo: f64,
pub hi: f64,
pub count: u32,
}
#[derive(Debug, Clone, Serialize)]
pub struct CdfPoint {
pub x: f64,
pub exceedance: f64,
}
#[derive(Debug, Clone, Serialize)]
pub struct Markers {
pub p90: f64,
pub p50: f64,
pub p10: f64,
}
#[derive(Debug, Clone, Serialize)]
pub struct Range {
pub min: f64,
pub max: f64,
}