surfaceplot/
surfaceplot.rs1use 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}