#vega #data-source #plot #data-analysis

vega_lite_4

Rust语言对Vega-Lite v4的API

5个版本 (3个重大更新)

0.7.0 2023年4月23日
0.6.0 2021年1月22日
0.5.0 2020年12月15日
0.4.2 2020年2月28日
0.4.1 2020年2月28日

可视化类别中排名47

每月下载量26
用于opendp

Apache-2.0

1.5MB
14K SLoC

Vega-Lite V4 for Rust

license version Release Doc

Actions Status codecov Dependabot Status

一个用于构建图表的Rust API,用于Vega-Lite V4。

类似于Python中的Altair项目,该项目基于Vega-Lite规范。Vega-Lite是一个交互式图形的高级语法。它提供了一种简洁的JSON语法,用于快速生成支持分析的可视化。Vega-Lite规范可以编译为Vega规范。这些规范随后由Vega的JavaScript运行时解析,以生成静态图像或基于Web的交互式视图。这个crate有一个完整的Vega-Lite 3.4规范映射,可以在src/schema.rs中找到。有了所有类型和结构,就可以创建你的Rust Vegalite图表,并将其序列化为Vega-Lite JSON。感谢Showata,生成的可视化可以在你的Web浏览器或Rust Jupyter Notebook中显示。也可以使用现有的Vega-Lite json并无缝连接你的数据源。这样,你可以利用现有的可视化并适应你的设计。

示例

为了有Vega-Lite V4规范的完整映射,自动生成了模式代码。为了描述所有可能的功能,github上提供了一个示例画廊

启动所有示例

cargo install cargo-make
cargo make run-all-examples

使用ndarray生成的数据的简单图表

let values: Array2<f64> = Array::random((100, 2), StandardNormal);

let chart = VegaliteBuilder::default()
    .title("Random points")
    .data(values)
    .mark(Mark::Point)
    .encoding(
        EncodingBuilder::default()
            .x(XClassBuilder::default()
                .field("data.0")
                .def_type(StandardType::Quantitative)
                .build()?)
            .y(YClassBuilder::default()
                .field("data.1")
                .def_type(StandardType::Quantitative)
                .build()?)
            .build()?,
    )
    .build()?;
chart.show()?;

使用现有的json定义和新的数据的简单图表

// Use existing vega-lite json specification
let spec = r##"{
    "$schema": "https://vega.github.io/schema/vega-lite/v4.0.json",
    "encoding": {
        "x": {
            "field": "data.0",
            "type": "quantitative"
        },
        "y": {
            "field": "data.1",
            "type": "quantitative"
        }
    },
    "mark": "point",
    "title": "Random points"
}"##;

// Use you own data to populate the chart
let values: Array2<f64> = Array::random((100, 2), StandardNormal);
let mut chart: Vegalite = serde_json::from_str(spec)?;
chart.data = values.into();

// display the chart using `showata`
chart.show()?;

功能

名称 默认启用 功能 相关crate
show_vega 可以在浏览器或笔记本中显示图表 showata
csv 可以从csv文件加载数据 csv
ndarray 可以从ndarray加载数据 ndarray
nalgebra 可以从nalgebra::Matrix加载数据 nalgebra
rulinalg 可以从rulinalg::matrix::Matrix加载数据 rulinalg
polars 可以从polars::prelude::DataFrame加载数据 polars

故障排除

栈大小

vegalite JSON 架构很大,有很多备选方案,因此类型化的 Rust 版本创建了一个大型的结构体和枚举集(宏展开前的生成源文件有 28K 行)。因此,模型在栈中的大小可能很大(这也是为什么在结构体中使用了 Box 的原因)。

在 wasm32 上,使用默认的栈大小(约 1 MB)时,使用 vegalite_4 可能会引发错误

  • 崩溃标签页显示 SIGSEVG(在基于铬的浏览器中)
  • 未捕获的 ( promise) RuntimeError: 内存访问越界或简单地 未捕获的 ( promise) RuntimeError

当前的解决方案是增加栈大小(例如约 1.5 MB)。对于基于 cargo 的项目,您可以将它添加到项目的 .cargo/config 文件中

[target.wasm32-unknown-unknown]
rustflags = [
  "-C", "link-args=-z stack-size=1500000",
]

依赖关系

~4–16MB
~205K SLoC