73 个版本

0.3.17 2024 年 8 月 15 日
0.3.13 2024 年 7 月 13 日
0.3.5 2024 年 3 月 11 日
0.2.2 2023 年 12 月 30 日
0.1.17 2023 年 7 月 29 日

图像 分类中排名 49

Download history 111/week @ 2024-05-02 57/week @ 2024-05-09 205/week @ 2024-05-16 116/week @ 2024-05-23 231/week @ 2024-05-30 127/week @ 2024-06-06 71/week @ 2024-06-13 232/week @ 2024-06-20 55/week @ 2024-06-27 352/week @ 2024-07-04 362/week @ 2024-07-11 109/week @ 2024-07-18 497/week @ 2024-07-25 551/week @ 2024-08-01 125/week @ 2024-08-08 244/week @ 2024-08-15

每月下载量 1,440

MPL-2.0 许可证

400KB
11K SLoC

charts-rs

中文

charts-rs 是一个用于 Rust 的图表库。它简单且快速。

Crates.io MIT licensed Build status

概述

charts-rs 是一种生成图表的简单方法,支持 svgpng 格式和主题:lightdarkgrafanaantvintagewaldenwesteroschalkshine。默认主题为 light。这些图表支持:BarHorizontalBarLinePieRadarScatterCandlestickTableHeatmapMultiChart

Apache ECharts 在前端开发者中很受欢迎,charts-rs 引用了它。开发者可以生成几乎与 Apache ECharts 相同的图表。

主题

主题

功能

  • 所有图表都支持多种主题
  • 从 ttf 或 otf 加载字体家族
  • 折线图支持平滑、填充、标记点和标记线
  • 所有图表都支持多个图例,例如:round rectcirclerect
  • 支持两个 y 轴,非常有用
  • 从 json 新建简单易用
  • 支持 svg、png、jpeg、webp 和 avif 格式,适用场景更多
  • Web json 编辑器通过一步尝试更多选项

演示

您可以尝试使用网络演示页面,它简单实用。

图表 Web 演示页面:https://charts.npmtrend.com/

图表 Web 源代码:https://github.com/vicanso/charts-rs-web

charts-rs

混合折线柱状图

charts-rs

水平柱状图

charts-rs

折线图

charts-rs

饼图

charts-rs

雷达图

charts-rs

散点图

charts-rs

烛台图

charts-rs

表格

charts-rs

热图

charts-rs

多图表

charts-rs

示例

从选项新建

use charts_rs::{
    BarChart, Box, SeriesCategory, THEME_GRAFANA
};
let mut bar_chart = BarChart::new_with_theme(
    vec![
        ("Evaporation", vec![2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6]).into(),
        (
            "Precipitation",
            vec![2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6],
        )
            .into(),
        ("Temperature", vec![2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3]).into(),
    ],
    vec![
        "Mon".to_string(),
        "Tue".to_string(),
        "Wed".to_string(),
        "Thu".to_string(),
        "Fri".to_string(),
        "Sat".to_string(),
        "Sun".to_string(),
    ],
    THEME_GRAFANA,
);
bar_chart.title_text = "Mixed Line and Bar".to_string();
bar_chart.legend_margin = Some(Box {
    top: bar_chart.title_height,
    bottom: 5.0,
    ..Default::default()
});
bar_chart.series_list[2].category = Some(SeriesCategory::Line);
bar_chart.series_list[2].y_axis_index = 1;
bar_chart.series_list[2].label_show = true;

bar_chart
    .y_axis_configs
    .push(bar_chart.y_axis_configs[0].clone());
bar_chart.y_axis_configs[0].axis_formatter = Some("{c} ml".to_string());
bar_chart.y_axis_configs[1].axis_formatter = Some("{c} °C".to_string());

println!("{}", &bar_chart.svg().unwrap());
svg_to_png(&bar_chart.svg().unwrap()).unwrap();

从 json

use charts_rs::{BarChart, svg_to_png};
let bar_chart = BarChart::from_json(
    r###"{
        "width": 630,
        "height": 410,
        "margin": {
            "left": 10,
            "top": 5,
            "right": 10
        },
        "title_text": "Bar Chart",
        "title_font_color": "#345",
        "title_align": "right",
        "sub_title_text": "demo",
        "legend_align": "left",
        "series_list": [
            {
                "name": "Email",
                "label_show": true,
                "data": [120.0, 132.0, 101.0, 134.0, 90.0, 230.0, 210.0]
            },
            {
                "name": "Union Ads",
                "data": [220.0, 182.0, 191.0, 234.0, 290.0, 330.0, 310.0]
            }
        ],
        "x_axis_data": [
            "Mon",
            "Tue",
            "Wed",
            "Thu",
            "Fri",
            "Sat",
            "Sun"
        ]
    }"###,
).unwrap();
println!("{}", bar_chart.svg().unwrap());
svg_to_png(&bar_chart.svg().unwrap()).unwrap();

加载更多字体

let buf = fs::read(file).unwrap();
get_or_try_init_fonts(vec![&buf]));

许可证

本项目采用 Apache License 2.0 许可证

依赖项

~6–12MB
~226K SLoC