Skip to main content

surfaceplot/
surfaceplot.rs

1use plotlars::{ColorBar, Palette, Plot, SurfacePlot, Text};
2use polars::prelude::*;
3use std::iter;
4
5fn main() {
6    let n: usize = 100;
7    let x_base: Vec<f64> = (0..n)
8        .map(|i| {
9            let step = (10.0 - (-10.0)) / (n - 1) as f64;
10            -10.0 + step * i as f64
11        })
12        .collect();
13    let y_base: Vec<f64> = (0..n)
14        .map(|i| {
15            let step = (10.0 - (-10.0)) / (n - 1) as f64;
16            -10.0 + step * i as f64
17        })
18        .collect();
19
20    let x = x_base
21        .iter()
22        .flat_map(|&xi| iter::repeat_n(xi, n))
23        .collect::<Vec<_>>();
24
25    let y = y_base
26        .iter()
27        .cycle()
28        .take(n * n)
29        .cloned()
30        .collect::<Vec<_>>();
31
32    let z = x_base
33        .iter()
34        .flat_map(|i| {
35            y_base
36                .iter()
37                .map(|j| 1.0 / (j * j + 5.0) * j.sin() + 1.0 / (i * i + 5.0) * i.cos())
38                .collect::<Vec<_>>()
39        })
40        .collect::<Vec<_>>();
41
42    let dataset = df![
43        "x" => &x,
44        "y" => &y,
45        "z" => &z,
46    ]
47    .unwrap();
48
49    SurfacePlot::builder()
50        .data(&dataset)
51        .x("x")
52        .y("y")
53        .z("z")
54        .plot_title(Text::from("Surface Plot").font("Arial").size(18))
55        .color_bar(&ColorBar::new().border_width(1))
56        .color_scale(Palette::Cividis)
57        .reverse_scale(true)
58        .opacity(0.5)
59        .build()
60        .plot();
61}