9 个版本

0.3.1 2023年11月25日
0.3.0 2023年11月25日
0.2.5 2023年10月10日
0.2.4 2023年7月24日
0.1.2 2023年7月16日

#27 in 可视化

Download history 46/week @ 2024-03-14 63/week @ 2024-03-21 67/week @ 2024-03-28 87/week @ 2024-04-04 70/week @ 2024-04-11 58/week @ 2024-04-18 65/week @ 2024-04-25 76/week @ 2024-05-02 64/week @ 2024-05-09 97/week @ 2024-05-16 108/week @ 2024-05-23 88/week @ 2024-05-30 124/week @ 2024-06-06 203/week @ 2024-06-13 247/week @ 2024-06-20 203/week @ 2024-06-27

792 每月下载量
用于 dev-radars

MIT/Apache

1.5MB
16K SLoC

Rust 11K SLoC // 0.0% comments JavaScript 5K SLoC // 0.0% comments Handlebars 24 SLoC

Charming - Rust 可视化库

crates.io docs.rs

Charming 是一个功能强大且灵活的 Rust 图表渲染库,利用 Apache ECharts 的强大功能提供高质量的数据可视化。这个库是用 Rust 编程语言构建的,旨在为 Rust 生态系统提供一种直观和有效的方法来生成和可视化图表,使用声明性和用户友好的 API。

亮点

  • 易于使用的声明性 API。
  • 丰富的图表类型,具有丰富且可自定义的图表主题和样式。
  • 适用于 WebAssembly 环境。
  • 支持渲染到多种格式,包括 HTML、SVG、PNG、JPEG、GIF、WEBP、PNM、TIFF、TGA、DDS、BMP、ICO、HDR、OPENEXR、FARBFELD、AVIF 和 QOI。

主题

Default

默认

Dark

深色

Vintage

复古

Westeros

复古

Essos

Essos

Wonderland

Essos

Walden

Walden

Chalk

粉笔

Infographic

信息图表

Macarons

马卡龙

Roma

Roma

Shine

闪光

Purple Passion

紫色激情

Halloween

万圣节

Charming 的未来版本将支持自定义主题。

基本用法

将 charming 添加为依赖项

$ cargo add charming

参考 Chart 结构体的文档以了解如何创建包含各种组件的图表。

创建图表后,您可以将它渲染成各种格式。Charming 提供三种类型的渲染器

  • HTML 渲染器: HtmlRenderer 将图表渲染成 HTML 片段,并将实际渲染任务卸载给用户的 Web 浏览器以提供交互式、无缝的体验。当您想在客户端渲染图表时,例如在 Web 应用程序中,此渲染器非常有用。
  • 图像渲染器: ImageRenderer 将图表渲染成图像文件。此渲染器使用嵌入的 deno_core 引擎执行 ECharts 的 JavaScript 代码并生成图像文件。此渲染器默认禁用,您需要启用 ssr (服务器端渲染) 功能才能使用它。
  • WASM 渲染器: WasmRenderer 在 WebAssembly 运行时中渲染图表。默认情况下,此渲染器被禁用,您需要启用 wasm 功能才能使用它。请注意,wasm 功能和 ssr 功能是互斥的

以下是一个将简单的饼图绘制到 SVG 文件中的示例

use charming::{
    component::Legend,
    element::ItemStyle,
    series::{Pie, PieRoseType},
    Chart, ImageRenderer
};

fn main() {
    let chart = Chart::new()
        .legend(Legend::new().top("bottom"))
        .series(
            Pie::new()
                .name("Nightingale Chart")
                .rose_type(PieRoseType::Radius)
                .radius(vec!["50", "250"])
                .center(vec!["50%", "50%"])
                .item_style(ItemStyle::new().border_radius(8))
                .data(vec![
                    (40.0, "rose 1"),
                    (38.0, "rose 2"),
                    (32.0, "rose 3"),
                    (30.0, "rose 4"),
                    (28.0, "rose 5"),
                    (26.0, "rose 6"),
                    (22.0, "rose 7"),
                    (18.0, "rose 8"),
                ]),
        );

    let mut renderer = ImageRenderer::new(1000, 800);
    renderer.save(&chart, "/tmp/nightingale.svg");
}

此代码创建以下 SVG 文件

作为另一个示例,代码文件 gallery/src/dataset/encode_and_matrix.rs 绘制了一个包含四个子图的复杂图表

crate 功能标志

以下两个功能标志可用,请注意它们不能同时使用

  • ssr - 启用 ImageRenderer,它提供了生成图像文件的能力。
  • wasm - 启用 WasmRenderer,它提供了在 WebAssembly 运行时中渲染图表的能力。

渲染器

// Use HtmlRenderer.
use charming::HtmlRenderer;

// Chart dimension 1000x800.
let renderer = HtmlRenderer::new("my charts", 1000, 800);
// Render the chart as HTML string.
let html_str = renderer.render(&chart).unwrap();
// Save the chart as HTML file.
renderer.save(&chart, "/tmp/chart.html").unwrap();


// Use ImageRenderer. The `ssr` feature needs to be enabled.
use charming::{ImageRenderer, ImageFormat};

// Chart dimension 1000x800.
let mut renderer = ImageRenderer::new(1000, 800);
// Render the chart as SVG string.
renderer.render(&chart).unwrap();
// Render the chart as PNG bytes.
renderer.render_format(ImageFormat::PNG, &chart).unwrap();
// Save the chart as SVG file.
renderer.save(&chart, "/tmp/chart.svg").unwrap();
// Save the chart as PNG file.
renderer.save_format(ImageFormat::PNG, &chart, "/tmp/chart.png");


// Use WasmRenderer. The `wasm` feature needs to be enabled.
use charming::WasmRenderer;

// Chart dimension 1000x800.
let renderer = WasmRenderer::new(1000, 800);
// Render the chart in the WebAssembly runtime
renderer.render(&chart).unwrap();

主题

Charming 默认支持许多主题。您可以使用 Theme 枚举为您的图表指定主题。例如,以下代码片段显示了如何使用 Westeros 主题

use charming::{Chart, ImageRenderer};
use charming::theme::Theme;
use charming::component::Title;

ImageRenderer::new(1000, 800).theme(Theme::Westeros).save(
    &Chart::new().title(Title::new().text("Westeros")),
    "/tmp/westeros.svg",
);

Charming 的未来版本将支持自定义主题。

以下是一些选定的图表示例。单击任何单个图表以查看其源代码文件。

您还可以克隆存储库并运行 cargo run --bin gallery 以在渲染的 HTML 页面上查看交互式图表。

条形图

Bar with Background Basic Bar Radial Polar Bar Label Position Set Style of Single Bar Stacked Column Tangential Polar Bar Waterfall World Population

箱线图

Boxplot Light Velocity Multiple Categories

蜡烛图

Basic Candlestick Shanghai Index

漏斗图

Funnel Chart Multiple Funnels

仪表盘图

Gauge Barometer Gauge Basic Gauge Simple

图形图

Hide Overlapped Label Les Miserables

热图

Heatmap on Cartesian

折线图

Area Pieces Basic Area Basic Line Confidence Band Data Transform Filter Distribution of Electricity Gradient Stacked Area Large Scale Area Line Gradient Rainfall Rainfall Vs. Evaporation Smoothed Line Stacked Area Stacked Line Temperature Change Two Value-Axes in Polar

平行图

Basic Parallel Parallel AQI

饼图

Nightingale Nightingale Referer of a Website

雷达图

Basic Radar Multiple Radar Proportion of Browsers

桑基图

Basic Sankey Node Align Left Sankey Sankey Orient Vertical

散点图

Anscombe Quartet Basic Scatter Bubble Chart Effect Scatter Punch Card of Github

旭日图

Drink Flavors

主题河流图

Theme River LastFM

树图

From Left to Right Tree Multiple Trees

依赖关系

~0.7–25MB
~380K SLoC