Rust数据可视化插件库datavzrd的使用,datavzrd提供高效数据渲染与交互式可视化功能

Rust数据可视化插件库datavzrd的使用

datavzrd是一个用于从表格数据集合(CSV、TSV、JSON或Parquet)创建可视化交互式HTML报告的工具。报告包含每列自动生成的vega-lite直方图。用户可以通过配置文件完全自定义图表,还可以添加指向其他网站的链接或在多个表格之间建立链接。

安装方法

全局安装二进制程序

cargo install datavzrd

作为库安装

在项目目录中运行以下命令:

cargo add datavzrd

或者在Cargo.toml中添加:

datavzrd = "2.58.5"

示例使用

以下是一个完整的使用示例,展示如何使用datavzrd创建交互式可视化报告:

use datavzrd::Config;
use std::path::PathBuf;

fn main() {
    // 创建配置对象
    let mut config = Config::default();
    
    // 设置输入文件路径
    config.input_path = PathBuf::from("data.csv");
    
    // 设置输出目录
    config.output_directory = PathBuf::from("output_report");
    
    // 添加自定义视图配置
    config.views.insert(
        "example_view".to_string(),
        datavzrd::ViewConfig {
            title: Some("示例视图".to_string()),
            description: Some("这是一个示例视图配置".to_string()),
            ..Default::default()
        },
    );
    
    // 添加表格配置
    config.tables.insert(
        "example_table".to_string(),
        datavzrd::TableConfig {
            headers: vec!["列1".to_string(), "列2".to_string(), "列3".to_string()],
            ..Default::default()
        },
    );
    
    // 生成报告
    if let Err(e) = datavzrd::generate_report(&config) {
        eprintln!("生成报告时出错: {}", e);
    }
}

完整示例demo

下面是一个更完整的示例,展示如何使用datavzrd创建包含多个视图和表格的报告:

use datavzrd::{Config, ViewConfig, TableConfig, PlotConfig};
use std::path::PathBuf;

fn main() {
    // 创建配置对象
    let mut config = Config::default();
    
    // 设置输入文件路径
    config.input_path = PathBuf::from("sales_data.csv");
    
    // 设置输出目录
    config.output_directory = PathBuf::from("sales_report");
    
    // 添加第一个视图配置
    config.views.insert(
        "sales_overview".to_string(),
        ViewConfig {
            title: Some("销售概览".to_string()),
            description: Some("显示销售数据的总体情况".to_string()),
            ..Default::default()
        },
    );
    
    // 添加第二个视图配置
    config.views.insert(
        "product_analysis".to_string(),
        ViewConfig {
            title: Some("产品分析".to_string()),
            description: Some("按产品分析销售数据".to_string()),
            ..Default::default()
        },
    );
    
    // 添加主表格配置
    config.tables.insert(
        "sales_data".to_string(),
        TableConfig {
            headers: vec![
                "日期".to_string(),
                "产品ID".to_string(),
                "销售额".to_string(),
                "数量".to_string(),
                "地区".to_string(),
            ],
            ..Default::default()
        },
    );
    
    // 添加产品表格配置
    config.tables.insert(
        "product_info".to_string(),
        TableConfig {
            headers: vec![
                "产品ID".to_string(),
                "产品名称".to_string(),
                "类别".to_string(),
                "单价".to_string(),
            ],
            ..Default::default()
        },
    );
    
    // 添加图表配置
    let mut plot_config = PlotConfig::default();
    plot_config.type_ = Some("bar".to_string());
    plot_config.color = Some("#4E79A7".to_string());
    
    // 生成报告
    if let Err(e) = datavzrd::generate_report(&config) {
        eprintln!("生成报告时出错: {}", e);
    } else {
        println!("报告已成功生成到 sales_report 目录");
    }
}

配置文件示例

# 销售数据报告配置
views:
  sales_overview:
    title: "销售概览"
    description: "显示销售数据的总体情况"
    tables:
      - name: "sales_data"
        columns:
          - name: "销售额"
            plot:
              type: "histogram"
              color: "#4E79A7"
          - name: "地区"
            plot:
              type: "bar"
              color: "#F28E2B"
    links:
      - name: "产品详情"
        table: "product_info"
        description: "查看产品详细信息"

  product_analysis:
    title: "产品分析"
    description: "按产品分析销售数据"
    tables:
      - name: "product_info"
        columns:
          - name: "单价"
            plot:
              type: "boxplot"
              color: "#E15759"

主要特性

  1. 自动生成每列的统计图表
  2. 完全可定制的可视化配置
  3. 支持多种表格数据格式(CSV、TSV、JSON、Parquet)
  4. 交互式HTML报告输出
  5. 支持在表格之间添加链接
  6. 可添加外部网站链接

作者

  • Johannes Köster
  • Felix Wiegand

此工具采用MIT许可证发布。


1 回复

Rust数据可视化插件库datavzrd的使用指南

介绍

datavzrd是一个高效的Rust数据可视化库,专注于提供快速的数据渲染和交互式可视化功能。它特别适合处理大型数据集,能够在保持高性能的同时提供丰富的可视化效果。

主要特性

  • 高性能数据渲染
  • 交互式可视化组件
  • 支持多种图表类型
  • 可定制的视觉样式
  • 与Rust生态系统无缝集成

安装方法

在Cargo.toml中添加依赖:

[dependencies]
datavzrd = "0.3"  # 请使用最新版本

基本使用方法

1. 创建简单表格

use datavzrd::{Table, TableData};

fn main() {
    let data = TableData::new(
        vec![
            vec!["Name".to_string(), "Age".to_string(), "Country".to_string()],
            vec!["Alice".to_string(), "30".to_string(), "USA".to_string()],
            vec!["Bob".to_string(), "25".to_string(), "Canada".to_string()],
            vec!["Charlie".to_string(), "35".to_string(), "UK".to_string()],
        ],
    );
    
    let table = Table::new(data)
        .with_title("Sample Person Data")
        .with_page_size(10);
    
    table.render("output.html").unwrap();
}

2. 创建柱状图

use datavzrd::{BarChart, BarChartData};

fn main() {
    let data = BarChartData::new(
        vec!["Q1", "Q2", "Q3", "Q4"],  // X轴标签
        vec![120, 150, 180, 90],      // 数据值
    );
    
    let chart = BarChart::new(data)
        .with_title("Quarterly Sales")
        .with_x_label("Quarter")
        .with_y_label("Sales (k$)");
    
    chart.render("sales_chart.html").unwrap();
}

高级功能

交互式表格

use datavzrd::{InteractiveTable, TableData};

fn main() {
    let data = TableData::new(
        vec![
            vec!["ID".to_string(), "Value".to_string(), "Status".to_string()],
            vec!["1".to_string(), "234.5".to_string(), "Active".to_string()],
            vec!["2".to_string(), "189.2".to_string(), "Inactive".to_string()],
            vec!["3".to_string(), "456.7".to_string(), "Active".to_string()],
        ],
    );
    
    let table = InteractiveTable::new(data)
        .with_sortable(true)
        .with_filterable(true)
        .with_editable(true);
    
    table.render("interactive_table.html").unwrap();
}

组合多个可视化

use datavzrd::{Dashboard, Table, BarChart, TableData, BarChartData};

fn main() {
    // 创建表格数据
    let table_data = TableData::new(
        vec![
            vec!["Product".to_string(), "Sales".to_string()],
            vec!["A".to_string(), "120".to_string()],
            vec!["B".to_string(), "150".to_string()],
            vec!["C".to_string(), "180".to_string()],
        ],
    );
    
    // 创建图表数据
    let chart_data = BarChartData::new(
        vec!["Jan", "Feb", "Mar"],
        vec![120, 150, 180],
    );
    
    // 创建仪表盘
    let mut dashboard = Dashboard::new("Sales Report");
    
    dashboard.add_component(
        Table::new(table_data)
            .with_title("Product Sales")
            .to_boxed()
    );
    
    dashboard.add_component(
        BarChart::new(chart_data)
            .with_title("Monthly Sales")
            .to_boxed()
    );
    
    dashboard.render("dashboard.html").unwrap();
}

自定义样式

use datavzrd::{BarChart, BarChartData, Color};

fn main() {
    let data = BarChartData::new(
        vec!["Team A", "Team B", "Team C"],
        vec![45, 60, 75],
    );
    
    let chart = BarChart::new(data)
        .with_title("Team Performance")
        .with_bar_color(Color::rgb(70, 130, 180))  // 钢蓝色
        .with_background_color(Color::rgb(240, 240, 240))  // 浅灰色背景
        .with_font("Arial");
    
    chart.render("custom_chart.html").unwrap();
}

注意事项

  1. datavzrd生成的HTML文件需要现代浏览器支持
  2. 对于非常大的数据集,考虑使用分页或虚拟滚动
  3. 交互功能在本地文件系统中可能受限,建议在Web服务器环境中使用

完整示例

// 完整示例:创建销售数据可视化仪表盘
use datavzrd::{Dashboard, Table, BarChart, LineChart, TableData, BarChartData, LineChartData};

fn main() {
    // 1. 创建产品表格数据
    let table_data = TableData::new(
        vec![
            vec!["产品ID".to_string(), "名称".to_string(), "库存".to_string(), "价格".to_string()],
            vec!["P001".to_string(), "笔记本".to_string(), "120".to_string(), "5999".to_string()],
            vec!["P002".to_string(), "手机".to_string(), "85".to_string(), "3999".to_string()],
            vec!["P003".to_string(), "平板".to_string(), "45".to_string(), "2599".to_string()],
        ]
    );

    // 2. 创建月度销售柱状图数据
    let bar_data = BarChartData::new(
        vec!["1月", "2月", "3月", "4月", "5月"],
        vec![120, 180, 210, 150, 300]
    );

    // 3. 创建销售趋势折线图数据
    let line_data = LineChartData::new(
        vec!["Q1", "Q2", "Q3", "Q4"],
        vec![450, 620, 580, 890]
    );

    // 创建仪表盘
    let mut dashboard = Dashboard::new("销售数据分析仪表盘");
    
    // 添加产品表格组件
    dashboard.add_component(
        Table::new(table_data)
            .with_title("产品库存表")
            .with_page_size(5)
            .to_boxed()
    );
    
    // 添加月度销售柱状图
    dashboard.add_component(
        BarChart::new(bar_data)
            .with_title("月度销售额(万元)")
            .with_bar_color(datavzrd::Color::rgb(65, 105, 225)) // 皇家蓝
            .to_boxed()
    );
    
    // 添加季度销售趋势图
    dashboard.add_component(
        LineChart::new(line_data)
            .with_title("季度销售趋势")
            .with_line_color(datavzrd::Color::rgb(220, 20, 60)) // 猩红色
            .to_boxed()
    );
    
    // 渲染仪表盘到HTML文件
    dashboard.render("sales_dashboard.html").unwrap();
}
回到顶部