Charming is a powerful and versatile chart rendering library for Rust that leverages the power of Apache ECharts to deliver high-quality data visualizations. Built with the Rust programming language, this library aims to provide the Rust ecosystem with an intuitive and effective way to generate and visualize charts, using a declarative and user-friendly API.
Highlights:
![]() Default |
![]() Dark |
![]() Vintage |
![]() Vintage |
![]() Essos |
![]() Essos |
![]() Walden |
![]() Chalk |
![]() Infographic |
![]() Macarons |
![]() Roma |
![]() Shine |
![]() Purple Passion |
![]() Halloween |
Charming provides two types of renderers:
HtmlRenderer
- It generates HTML fragments and offloads the actual rendering to user's browser for an interactive, seamless experience.ImageRenderer
- It has the ability to generates static images. This renderer is disabled by default, to enable it, add the ssr
feature in your Cargo.toml
.```rs // Use HtmlRenderer. use echarts::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 echarts::{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.renderformat(ImageFormat::PNG, &chart).unwrap(); // Save the chart as SVG file. renderer.save(&chart, "/tmp/chart.svg").unwrap(); // Save the chart as PNG file. renderer.saveformat(ImageFormat::PNG, &chart, "/tmp/chart.png"); ```
Add charming as a dependency:
sh
$ cargo add charming
Below is an example of drawing a simple pie chart.
```rs use echarts::{ component::Legend, df, element::ItemStyle, series::{Pie, PieRoseType}, Chart, ImageRenderer };
fn main() { let chart = Chart::new() .legend(Legend::new().top("bottom")) .series( Pie::new() .name("Nightingale Chart") .rosetype(PieRoseType::Radius) .radius(("50", "250")) .center(("50%", "50%")) .itemstyle(ItemStyle::new().border_radius(8)) .data(df![ (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"); } ```
This code creates the following SVG file:
As another example, the code file gallery/src/dataset/encodeandmatrix.rs draws a complex chart with four sub-charts:
Here are some selected chart examples. Click on any single chart to view its source code file.
You can also clone the repo and run cargo run --bin gallery
to view the interactive charts on the rendered HTML page.