use plotters::prelude::*;
use plotters_statistical::QqPlot;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let root = SVGBackend::new("qq_plot.svg", (600, 600)).into_drawing_area();
root.fill(&WHITE)?;
let n = 150;
let data: Vec<f64> = (0..n)
.map(|i| {
let u = (i as f64 + 0.5) / n as f64;
-(1.0 - u).ln()
})
.collect();
let mut chart = ChartBuilder::on(&root)
.caption("Normal Q–Q (right-skewed sample)", ("sans-serif", 22))
.margin(20)
.set_label_area_size(LabelAreaPosition::Left, 50)
.set_label_area_size(LabelAreaPosition::Bottom, 45)
.build_cartesian_2d(-3f64..3f64, -0.5f64..5f64)?;
chart
.configure_mesh()
.x_desc("theoretical quantiles")
.y_desc("sample quantiles")
.draw()?;
chart.draw_series(std::iter::once(QqPlot::from_data(&data)?))?;
root.present()?;
println!("wrote qq_plot.svg");
Ok(())
}