use ruviz::prelude::*;
fn main() -> Result<()> {
let x: Vec<f64> = (0..50).map(|i| i as f64 * 0.2).collect();
let y_sin: Vec<f64> = x.iter().map(|&v| v.sin()).collect();
let y_cos: Vec<f64> = x.iter().map(|&v| v.cos()).collect();
let plot_line = Plot::new()
.title("Line Plot")
.xlabel("x")
.ylabel("y")
.line(&x, &y_sin)
.color(Color::from_palette(0))
.line_width(2.0);
let x_scatter: Vec<f64> = (0..30).map(|i| i as f64 * 0.3).collect();
let y_scatter: Vec<f64> = x_scatter
.iter()
.map(|&v| v.cos() + 0.1 * (v * 3.0).sin())
.collect();
let plot_scatter = Plot::new()
.title("Scatter Plot")
.xlabel("x")
.ylabel("y")
.scatter(&x_scatter, &y_scatter)
.color(Color::from_palette(1))
.marker_size(6.0);
let categories = vec!["Q1", "Q2", "Q3", "Q4"];
let values = vec![28.0, 45.0, 38.0, 52.0];
let plot_bar = Plot::new()
.title("Bar Chart")
.xlabel("Quarter")
.ylabel("Sales")
.bar(&categories, &values)
.color(Color::from_palette(2));
let plot_multi = Plot::new()
.title("Comparison")
.xlabel("x")
.ylabel("y")
.legend_position(LegendPosition::UpperRight)
.line(&x, &y_sin)
.label("sin(x)")
.color(Color::from_palette(0))
.line(&x, &y_cos)
.label("cos(x)")
.color(Color::from_palette(1));
subplots(2, 2, 800, 600)?
.suptitle("Subplot Gallery")
.subplot_at(0, plot_line.into())?
.subplot_at(1, plot_scatter.into())?
.subplot_at(2, plot_bar.into())?
.subplot_at(3, plot_multi.into())?
.save("docs/assets/rustdoc/subplots.png")?;
println!("✓ Generated docs/assets/rustdoc/subplots.png");
Ok(())
}