【项目分享】Charton:高性能 Rust 声明式绘图库(挑战千万级数据渲染)

5 阅读1分钟

大家好!

最近我一直在开发 Charton,这是一个专为 Rust 打造的声明式绘图库。我的目标是为 Rust 社区的数据科学家提供一个高性能的可视化工具,能够轻松处理大规模、多源异构的数据。

Charton 实际上是图形语法在 Rust 生态中的实现,对标的是R语言中的ggplot2,python语言中的altair,目前已经全部实现了九种基本图层元素,通过自由组合可以创建出多种多样的复杂图表类型。

Charton 的核心计算引擎基于 rayonahash 构建。如下方的示例代码所示,它可以在单核 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…