rust - 使用 plotlib 创建 SVG 失败并显示 "invalid y_range"

标签 rust

我正在尝试计算消息中的字母并将它们导出到图像中。

我已经成功地用这些字母创建了一个 BTreeMap 并计算了它们。我遇到的问题是使用 plotlib 将它们导出到 SVG。我愿意使用其他库,但我觉得我的问题是更多地使用库而不是库本身。

这是我的计数器代码

Cargo.toml

[dependencies]
plotlib = "0.4.0"

ma​​in.rs

use std::collections::btree_map::BTreeMap;

use plotlib::style::BarChart;

fn main() {
    let message: &str = "This is a long message";
    let mut count = BTreeMap::new();

    for c in message.trim().to_lowercase().chars() {
        if c.is_alphabetic() {
            *count.entry(c).or_insert(0) += 1
        }
    }

    println!("Number of occurences per character");
    for (ch, count) in &count {
        println!("{:?}: {}", ch, count);
        let count = *count as f64;
        plotlib::barchart::BarChart::new(count).label(ch.to_string());
    }
    let v = plotlib::view::CategoricalView::new();   
    plotlib::page::Page::single(&v)
        .save("barchart.svg")
        .expect("saving svg");
}

我希望这个程序能生成一个包含数据的 SVG,但是主线程发生了困惑

Number of occurences per character
'a': 2
'e': 2
'g': 2
'h': 1
'i': 2
'l': 1
'm': 1
'n': 1
'o': 1
's': 4
't': 1
thread 'main' panicked at 'saving svg: ErrorMessage { msg: "invalid y_range: Range { lower: inf, upper: -inf }" }', src/libcore/result.rs:997:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

最佳答案

您的 View 是空的。因此,没有什么可绘制的,SVG 的边界处于其初始无效状态。

您必须将 BarChart 添加到您的 CategoricalView然后在页面上使用该 View ,例如:

let mut data = Vec::new();

for (ch, count) in &count {
    println!("{:?}: {}", ch, count);
    let count = *count as f64;
    data.push(plotlib::barchart::BarChart::new(count).label(ch.to_string()));
}

// Add data to the view
let v = data
    .iter()
    .fold(plotlib::view::CategoricalView::new(), |view, datum| {
        view.add(datum)
    });

plotlib::page::Page::single(&v)
    .save("barchart.svg")
    .expect("saving svg");

关于rust - 使用 plotlib 创建 SVG 失败并显示 "invalid y_range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56502350/

相关文章:

c++ - 为什么要设计一种具有独特匿名类型的语言?

module - 为什么 Rust 中有 mod 关键字?

rust - 如何删除 NEAR 协议(protocol)中的智能合约?

rust - 如何在rust宏中从 “Bar”获得 “Foo::Bar”?

rust - 如何为 Cargo.toml 中的 [build-dependencies] 生成 rustdoc 文档?

struct - 在以下上下文中如何解决 "lifetime of reference outlives lifetime of borrowed content"?

functional-programming - 如何在不创建闭包的情况下调用多参数函数?

generics - 预期的类型参数,发现 &A 预期的 A

error-handling - 如果Option为Some,返回Err的惯用方式

rust - 从Vec移除一系列元素