Skip to main content

density/
density.rs

1use ggplot_rs::prelude::*;
2use polars::prelude::*;
3
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5    // Generate two overlapping distributions using deterministic pseudo-random values
6    let value: Vec<f64> = (0..200_u64)
7        .map(|i| {
8            let r = ((i.wrapping_mul(1103515245).wrapping_add(12345)) % (1 << 16)) as f64
9                / (1u64 << 16) as f64;
10            if i < 100 {
11                3.0 + r * 4.0
12            } else {
13                5.0 + r * 4.0
14            }
15        })
16        .collect();
17    let group: Vec<&str> = (0..200)
18        .map(|i| if i < 100 { "Group A" } else { "Group B" })
19        .collect();
20
21    let df = df! {
22        "value" => value,
23        "group" => group,
24    }?;
25
26    GGPlot::new(df)
27        .aes(Aes::new().x("value").color("group"))
28        .geom_density()
29        .title("Density Plot by Group")
30        .xlab("Value")
31        .ylab("Density")
32        .save("density.svg")?;
33
34    println!("Saved density.svg");
35    Ok(())
36}