Skip to main content

basic_line/
basic_line.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2//! Standalone line chart — no feature flags needed.
3
4use esoc_chart::v2::{line, Chart, Layer, MarkType};
5
6fn main() -> esoc_chart::error::Result<()> {
7    // Sine and cosine waves
8    let x: Vec<f64> = (0..100).map(|i| f64::from(i) * 0.1).collect();
9    let y_sin: Vec<f64> = x.iter().map(|&xi| xi.sin()).collect();
10    let y_cos: Vec<f64> = x.iter().map(|&xi| xi.cos()).collect();
11
12    // Single line chart: sin(x)
13    let svg = line(&x, &y_sin)
14        .title("sin(x)")
15        .x_label("x")
16        .y_label("amplitude")
17        .to_svg()?;
18
19    std::fs::write("basic_line.svg", &svg)?;
20    println!("Saved basic_line.svg ({} bytes)", svg.len());
21
22    // Multi-layer chart: sin + cos via Grammar API
23    let chart = Chart::new()
24        .layer(Layer::new(MarkType::Line).with_x(x.clone()).with_y(y_sin))
25        .layer(Layer::new(MarkType::Line).with_x(x).with_y(y_cos))
26        .title("sin(x) and cos(x)")
27        .x_label("x")
28        .y_label("amplitude")
29        .size(900.0, 500.0);
30
31    let svg2 = chart.to_svg()?;
32    std::fs::write("multi_line.svg", &svg2)?;
33    println!("Saved multi_line.svg ({} bytes)", svg2.len());
34
35    Ok(())
36}