kuva 0.1.4

Scientific plotting library in Rust with various backends.
Documentation
use kuva::plot::ChordPlot;
use kuva::render::{plots::Plot, layout::Layout, render::render_multiple};
use kuva::backend::svg::SvgBackend;

#[test]
fn chord_basic() {
    let matrix = vec![
        vec![0.0, 10.0, 5.0],
        vec![10.0, 0.0, 8.0],
        vec![5.0, 8.0, 0.0],
    ];
    let chord = ChordPlot::new()
        .with_matrix(matrix)
        .with_labels(["A", "B", "C"])
        .with_opacity(0.7);
    let plots = vec![Plot::Chord(chord)];
    let layout = Layout::auto_from_plots(&plots)
        .with_title("Chord Diagram");
    let svg = SvgBackend.render_scene(&render_multiple(plots, layout));
    std::fs::write("test_outputs/chord_basic.svg", svg).unwrap();
}

#[test]
fn chord_asymmetric() {
    let matrix = vec![
        vec![0.0, 15.0, 3.0, 7.0],
        vec![5.0, 0.0, 12.0, 0.0],
        vec![10.0, 4.0, 0.0, 6.0],
        vec![2.0, 8.0, 1.0, 0.0],
    ];
    let chord = ChordPlot::new()
        .with_matrix(matrix)
        .with_labels(["Alpha", "Beta", "Gamma", "Delta"])
        .with_colors(["#e41a1c", "#377eb8", "#4daf4a", "#984ea3"])
        .with_gap(3.0)
        .with_opacity(0.65)
        .with_legend("Flows");
    let plots = vec![Plot::Chord(chord)];
    let layout = Layout::auto_from_plots(&plots)
        .with_title("Asymmetric Chord Diagram");
    let svg = SvgBackend.render_scene(&render_multiple(plots, layout));
    std::fs::write("test_outputs/chord_asymmetric.svg", svg).unwrap();
}