neural_network_rs/plotter/
graph_plotter.rs1use plotters::prelude::*;
2
3pub fn plot_graph(name: &String, data: &Vec<(i32, f64)>) -> Result<(), Box<dyn std::error::Error>> {
4 let path_name = format!("images/{}_history.png", name);
5
6 let root = BitMapBackend::new(&path_name, (640, 480)).into_drawing_area();
7 root.fill(&WHITE)?;
8
9 let x_range = 0..data[data.len() - 1].0;
10 let y_range = 0.0..data
11 .iter()
12 .map(|x| x.1)
13 .max_by(|x, y| x.partial_cmp(y).unwrap())
14 .unwrap();
15
16 let mut chart = ChartBuilder::on(&root)
17 .caption("History-".to_owned() + &name, ("sans-serif", 24).into_font())
18 .margin(5)
19 .x_label_area_size(30)
20 .y_label_area_size(60)
21 .build_cartesian_2d(x_range, y_range)?;
22
23 chart
24 .configure_mesh()
25 .x_desc("Epoch")
26 .y_desc("Cost")
27 .draw()?;
28
29 chart
30 .draw_series(LineSeries::new((0..data.len()).map(|i| data[i]), &RED))?
31 .label("cost")
32 .legend(|(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], &RED));
33
34 chart
35 .configure_series_labels()
36 .background_style(&WHITE.mix(0.8))
37 .border_style(&BLACK)
38 .draw()?;
39
40 root.present()?;
41
42 Ok(())
43}