9 个版本
0.3.1 | 2023年11月25日 |
---|---|
0.3.0 |
|
0.2.5 | 2023年10月10日 |
0.2.4 | 2023年7月24日 |
0.1.2 | 2023年7月16日 |
#27 in 可视化
792 每月下载量
用于 dev-radars
1.5MB
16K SLoC
Charming - Rust 可视化库
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。
主题
默认 |
深色 |
复古 |
复古 |
Essos |
Essos |
Walden |
粉笔 |
信息图表 |
马卡龙 |
Roma |
闪光 |
紫色激情 |
万圣节 |
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 页面上查看交互式图表。
条形图
箱线图
蜡烛图
漏斗图
仪表盘图
图形图
热图
折线图
平行图
饼图
雷达图
桑基图
散点图
旭日图
主题河流图
树图
依赖关系
~0.7–25MB
~380K SLoC