Rust Plotters示例无法生成图片,添加present()后报错
Rust Plotters生成图片失败及报错解决方法
问题描述
我尝试运行Rust Plotters用户指南中的示例,但运行后没有在images/目录或项目其他位置生成图片。添加root_drawing_area.present().unwrap();语句后,运行报错提示找不到文件或目录。
相关代码
use plotters::prelude::*; fn main() { let root_drawing_area = BitMapBackend::new("images/0.1.png", (1024, 768)) .into_drawing_area(); root_drawing_area.fill(&WHITE).unwrap(); let mut chart = ChartBuilder::on(&root_drawing_area) .build_cartesian_2d(-3.14..3.14, -1.2..1.2) .unwrap(); chart.draw_series(LineSeries::new( (-314..314).map(|x| x as f64 / 100.0).map(|x| (x, x.sin())), &RED )).unwrap(); root_drawing_area.present().unwrap(); }
报错信息
% cargo run Compiling plotters v0.1.0 (/Users/sledge/Sandbox/plotters) Finished dev [unoptimized + debuginfo] target(s) in 0.82s Running `target/debug/plotters` thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: BackendError(DrawingError(ImageError(IoError(Os { code: 2, kind: NotFound, message: "No such file or directory" }))))', src/main.rs:18:33 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
解决方法
问题核心是**images目录不存在**,Plotters不会自动创建缺失的目标目录;而最初未生成图片是因为缺少present()方法触发文件写入操作。
方法1:手动创建目录
在项目根目录执行以下命令创建目录:
mkdir images
之后重新运行cargo run即可正常生成图片。
方法2:代码中自动创建目录(推荐)
通过std::fs模块在初始化Backend前检查并递归创建目录,修改后的代码如下:
use plotters::prelude::*; use std::fs; fn main() { // 递归创建images目录,父目录不存在时也会自动创建 fs::create_dir_all("images").unwrap(); let root_drawing_area = BitMapBackend::new("images/0.1.png", (1024, 768)) .into_drawing_area(); root_drawing_area.fill(&WHITE).unwrap(); let mut chart = ChartBuilder::on(&root_drawing_area) .build_cartesian_2d(-3.14..3.14, -1.2..1.2) .unwrap(); chart.draw_series(LineSeries::new( (-314..314).map(|x| x as f64 / 100.0).map(|x| (x, x.sin())), &RED )).unwrap(); root_drawing_area.present().unwrap(); }
内容的提问来源于stack exchange,提问作者Sledge
相关产品推荐
相关产品推荐

