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