charts-rs
charts-rs is a charting library for rust. It's simple and fast.
Overview
charts-rs provides a straightforward approach to generating charts with support for multiple output formats including svg, png, jpeg, webp, and avif. The library offers nine distinct themes: light, dark, grafana, ant, vintage, walden, westeros, chalk, and shine, with light as the default theme.
The library supports twelve chart types: Bar, HorizontalBar, Line, Pie, Radar, Scatter, Candlestick, Table, Heatmap, MultiChart, Calendar, and Gauge. Drawing inspiration from Apache ECharts, charts-rs enables developers to create charts with similar functionality and appearance.
Themes
Features
- Nine built-in themes available for all chart types
- Custom font loading from ttf or otf files
- Advanced line chart features: smooth curves, area filling, mark points and mark lines
- Multiple legend styles across all charts:
round rect,circle, andrect - Dual y-axis support for enhanced data visualization
- Logarithmic scale support (
"log","log2", or{"type":"log","base":N}) - Gradient fill support for bars, areas, and pie slices (
LinearGradient) - JSON-based chart configuration for simplified setup
- Multiple output formats (svg, png, jpeg, webp, avif) for various use cases
- Scaled image export via
svg_to_png_with_sizeand equivalent functions for other formats - Web-based JSON editor for interactive chart configuration and testing
Demo
You can try to use the web demo page, it's simple and useful.
Charts Web Demo Page: https://charts.npmtrend.com/
Charts Web Source: https://github.com/vicanso/charts-rs-web
Mix line bar
Horizontal bar
Line
Pie
Radar
Scatter
Candlestick
Table
Heatmap
Multi Chart
Example
New from option
use ;
let mut bar_chart = new_with_theme;
bar_chart.title_text = "Mixed Line and Bar".to_string;
bar_chart.legend_margin = Some;
bar_chart.series_list.category = Some;
bar_chart.series_list.y_axis_index = 1;
bar_chart.series_list.label_show = true;
bar_chart
.y_axis_configs
.push;
bar_chart.y_axis_configs.axis_formatter = Some;
bar_chart.y_axis_configs.axis_formatter = Some;
println!;
svg_to_png.unwrap;
From json
use ;
let bar_chart = from_json.unwrap;
println!;
svg_to_png.unwrap;
Scaled image export
use ;
let chart = from_json.unwrap;
let svg = chart.svg.unwrap;
// Scale to exactly 800×400
let png = svg_to_png_with_size.unwrap;
// Scale to width 800, preserve aspect ratio
let png = svg_to_png_with_size.unwrap;
Load more fonts
let buf = read.unwrap;
get_or_try_init_fonts);
License
This project is licensed under the Apache-2.0 license.