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
1.5MB
14K SLoC
Vega-Lite V4 for Rust
一个用于构建图表的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 |
链接
- Wiki - AGuideToRustGraphicsLibraries2019
- Python 数据可视化领域的一次戏剧性之旅(包括 ggplot 和 Altair) – Regress to Impress
- 在 Altair 中指定数据 — Altair 3.0.0 文档
- 可视化 — Rust 库/包列表 // Lib.rs
- Quicktype(与替代方案存在问题)被用来从vega-lite 的 JSON 架构启动
src/schema.rs
故障排除
栈大小
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