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