surfaceplot/
surfaceplot.rs

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