大家好!
最近我一直在开发 Charton,这是一个专为 Rust 打造的声明式绘图库。我的目标是为 Rust 社区的数据科学家提供一个高性能的可视化工具,能够轻松处理大规模、多源异构的数据。
Charton 实际上是图形语法在 Rust 生态中的实现,对标的是R语言中的ggplot2,python语言中的altair,目前已经全部实现了九种基本图层元素,通过自由组合可以创建出多种多样的复杂图表类型。
Charton 的核心计算引擎基于 rayon 和 ahash 构建。如下方的示例代码所示,它可以在单核 CPU 上,在 20 毫秒内完成 1000 万行数据的处理。
示例代码(1000 万点压力测试):
use charton::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let count = 10_000_000;
let x: Vec<f64> = (0..count).map(|i| i as f64 * 0.01).collect();
let y: Vec<f64> = x.iter().map(|&val| val.sin()).collect();
chart!(x, y)?
.mark_point()?
.encode((alt::x("x"), alt::y("y")))?
.save("stress_test.svg")?;
Ok(())
}
目前数据处理速度已经非常快,但我正在考虑集成 Vello (WGPU) 作为主要的渲染后端,以解决矢量格式(如 SVG)带来的巨大开销,从而实现大规模数据集的丝滑交互。
我很想听听大家对 Charton 的看法,或者关于 API 易用性(Ergonomics)的任何反馈!
项目地址: github.com/wangjiawen2…