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"
主要特性
- 自动生成每列的统计图表
- 完全可定制的可视化配置
- 支持多种表格数据格式(CSV、TSV、JSON、Parquet)
- 交互式HTML报告输出
- 支持在表格之间添加链接
- 可添加外部网站链接
作者
- 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();
}
注意事项
- datavzrd生成的HTML文件需要现代浏览器支持
- 对于非常大的数据集,考虑使用分页或虚拟滚动
- 交互功能在本地文件系统中可能受限,建议在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();
}