diff options
Diffstat (limited to 'vendor/plotters/examples/3d-plot.rs')
-rw-r--r-- | vendor/plotters/examples/3d-plot.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/vendor/plotters/examples/3d-plot.rs b/vendor/plotters/examples/3d-plot.rs new file mode 100644 index 000000000..af40cc29e --- /dev/null +++ b/vendor/plotters/examples/3d-plot.rs @@ -0,0 +1,62 @@ +use plotters::prelude::*; +const OUT_FILE_NAME: &'static str = "plotters-doc-data/3d-plot.svg"; +fn main() -> Result<(), Box<dyn std::error::Error>> { + let area = SVGBackend::new(OUT_FILE_NAME, (1024, 760)).into_drawing_area(); + + area.fill(&WHITE)?; + + let x_axis = (-3.0..3.0).step(0.1); + let z_axis = (-3.0..3.0).step(0.1); + + let mut chart = ChartBuilder::on(&area) + .caption(format!("3D Plot Test"), ("sans", 20)) + .build_cartesian_3d(x_axis.clone(), -3.0..3.0, z_axis.clone())?; + + chart.with_projection(|mut pb| { + pb.yaw = 0.5; + pb.scale = 0.9; + pb.into_matrix() + }); + + chart + .configure_axes() + .light_grid_style(BLACK.mix(0.15)) + .max_light_lines(3) + .draw()?; + + chart + .draw_series( + SurfaceSeries::xoz( + (-30..30).map(|f| f as f64 / 10.0), + (-30..30).map(|f| f as f64 / 10.0), + |x, z| (x * x + z * z).cos(), + ) + .style(BLUE.mix(0.2).filled()), + )? + .label("Surface") + .legend(|(x, y)| Rectangle::new([(x + 5, y - 5), (x + 15, y + 5)], BLUE.mix(0.5).filled())); + + chart + .draw_series(LineSeries::new( + (-100..100) + .map(|y| y as f64 / 40.0) + .map(|y| ((y * 10.0).sin(), y, (y * 10.0).cos())), + &BLACK, + ))? + .label("Line") + .legend(|(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], &BLACK)); + + chart + .configure_series_labels() + .border_style(&BLACK) + .draw()?; + + // To avoid the IO failure being ignored silently, we manually call the present function + area.present().expect("Unable to write result to file, please make sure 'plotters-doc-data' dir exists under current dir"); + println!("Result has been saved to {}", OUT_FILE_NAME); + Ok(()) +} +#[test] +fn entry_point() { + main().unwrap() +} |