1 个不稳定版本
0.7.0 | 2023年4月23日 |
---|
#137 in 可视化
1.5MB
14K SLoC
为Rust的Vega-Lite V5
一个用于构建图表的Rust API的Vega-Lite V4。
与Python中的Altair项目类似,该项目基于Vega-Lite规范。Vega-Lite是一种交互式图形的高级语法。它提供了一种简洁的JSON语法,可以快速生成可视化以支持分析。Vega-Lite规范可以编译为Vega规范。然后,这些规范由Vega的JavaScript运行时解析,以生成静态图像或基于Web的交互式视图。该库具有Vega-Lite 3.4规范的完整映射,可以在src/schema.rs
中找到。通过所有类型和结构,可以创建将序列化为Vega-Lite JSON的Rust Vegalite图。感谢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/v5.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()?;
功能
名称 | 默认启用 | 功能 | 相关库 |
---|---|---|---|
show_vega | 是 | 可以在浏览器或笔记本中显示图表 | showata |
csv | 是 | 可以从csv加载数据 | csv |
ndarray | 是 | 可以从ndarray加载数据 | ndarray |
nalgebra | 否 | 可以从nalgebra::Matrix加载数据 | nalgebra |
rulinalg | 否 | 可以从rulinalg::matrix::Matrix加载数据 | rulinalg |
polars | 否 | 可以从polars::prelude::DataFrame加载数据 | polars |
链接
- Wiki - 2019年Rust图形库指南
- Python数据可视化领域的震撼之旅(包括ggplot和Altair) – 回到冲击
- 在 Altair 中指定数据 — Altair 3.0.0 文档
- 可视化 — Rust 库/crate 列表 // Lib.rs
- 使用了 Quicktype(与替代方案有关问题)从vega-lite 的 JSON 架构启动
src/schema.rs
故障排除
堆栈大小
由于 vegalite JSON 架构很大,有许多替代方案,所以类型化的 Rust 版本创建了大量结构体和枚举(宏展开前的生成源文件有 28K 行)。因此,模型在堆栈中的大小可能很大(这也是为什么在结构体中使用 Box 的原因)。
在 wasm32 上,使用默认的堆栈大小(约 1 MB)时,使用 vegalite_5 可能会引发错误
- 崩溃标签页中带有
SIGSEGV
(基于铬的浏览器) 未捕获的 (在 promise) RuntimeError: 内存访问越界
或简单地说未捕获的 (在 promise) RuntimeError
当前的解决方案是增加堆栈大小(例如 ~ 1.5 MB)。对于基于 cargo 的项目,您可以将以下内容添加到项目的 .cargo/config
文件中
[target.wasm32-unknown-unknown]
rustflags = [
"-C", "link-args=-z stack-size=1500000",
]
依赖关系
~4–16MB
~207K SLoC