Rust数据可视化库lowcharts的使用,lowcharts提供轻量级图表绘制与动态数据展示功能

Rust数据可视化库lowcharts的使用,lowcharts提供轻量级图表绘制与动态数据展示功能

lowcharts是一个用于在终端中绘制低分辨率图形的工具。它适用于那些我们拥有文本文件中的数值数据,并希望在终端中显示以进行基本分析的场景。

主要功能

lowcharts支持六种基本类型的图表:

1. 输入匹配的条形图

这是最常见的用例,用于统计输入中匹配特定模式的数量。

示例命令:

lowcharts matches --input database.log SELECT UPDATE DELETE INSERT DROP

2. 数值输入的直方图

用于绘制数值数据的分布情况。

示例命令:

python3 -c 'import random; [print(random.normalvariate(5, 5)) for _ in range(100000)]' | lowcharts hist

3. 时间直方图

用于显示日志事件随时间的变化。

示例命令:

strace -tt ls -lR * 2>&1 | lowcharts timehist --intervals 10

4. 分割时间直方图

将时间直方图和条形图结合在一个可视化中。

示例命令:

strace -tt ls -lR 2>&1 | lowcharts split-timehist open mmap close read write --intervals 10

5. 常见词直方图

用于绘制输入行中最常见的术语。

示例命令:

strace ls -l 2>&1 | lowcharts common-terms --lines 8 -R '(.*?)\('

6. X-Y图

用于绘制数值随时间的变化。

示例命令:

cat ram-usage | lowcharts plot --height 20 --width 50

作为库使用

lowcharts也可以作为库使用,任何需要显示基于文本图表的应用都可以使用它。

首先在Cargo.toml中添加依赖:

[dependencies]
lowcharts = "*"

示例代码:

use lowcharts::plot;

let vec = &[-1.0, -1.1, 2.0, 2.0, 2.1, -0.9, 11.0, 11.2, 1.9, 1.99];
// 绘制上述向量的直方图,使用4个桶,精度由库选择
let options = plot::HistogramOptions { intervals: 4, ..Default::default() };
let histogram = plot::Histogram::new(vec, options);
print!("{}", histogram);

要禁用颜色,可以:

// use yansi::Paint;
Paint::disable();

安装方式

  1. 通过下载预编译二进制文件
  2. 通过本地编译:
git clone https://github.com/juan-leon/lowcharts
cd lowcharts
cargo install --path .
  1. 通过AUR(Arch Linux用户)
  2. 通过Debian包

完整示例代码

以下是一个完整的Rust程序示例,展示如何使用lowcharts库绘制直方图:

use lowcharts::plot;

fn main() {
    // 创建一些示例数据
    let data = vec![
        1.2, 1.5, 1.7, 1.8, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5,
        2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5,
        3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4,
        4.5, 4.5, 4.6, 4.7, 4.8, 4.9, 5.0, 5.1, 5.2, 5.3,
        5.4, 5.5, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0, 6.1, 6.2,
        6.3, 6.4, 6.5, 6.5, 6.6, 6.7, 6.8, 6.9, 7.0, 7.1,
        7.2, 7.3, 7.4, 7.5, 7.5, 7.6, 7.7, 7.8, 7.9, 8.0,
    ];

    // 设置直方图选项
    let options = plot::HistogramOptions {
        intervals: 10, // 使用10个区间
        width: 60,     // 图表宽度为60个字符
        ..Default::default() // 其他选项使用默认值
    };

    // 创建直方图
    let histogram = plot::Histogram::new(&data, options);
    
    // 打印直方图
    println!("{}", histogram);
}

这个示例会创建一个包含70个数据点的数据集,并使用lowcharts库绘制一个包含10个区间的直方图,宽度为60个字符。运行程序后,你将在终端看到类似于前面的示例中的直方图输出。


1 回复

Rust数据可视化库lowcharts的使用指南

介绍

lowcharts是一个轻量级的Rust数据可视化库,专注于简单易用的图表绘制和动态数据展示功能。它特别适合需要快速集成基本图表功能的Rust应用场景。

主要特性

  • 轻量级设计,依赖少
  • 支持多种基础图表类型
  • 动态数据更新能力
  • 简单的API设计
  • 可定制化的样式选项

安装方法

在Cargo.toml中添加依赖:

[dependencies]
lowcharts = "0.2"  # 请使用最新版本

基本使用方法

1. 创建简单的柱状图

use lowcharts::{BarChart, BarChartOptions, BarChartData};

fn main() {
    let data = BarChartData {
        labels: vec!["Jan", "Feb", "Mar", "Apr"],
        datasets: vec![
            vec![12.0, 19.0, 3.0, 5.0],
        ],
    };

    let options = BarChartOptions {
        title: Some("Monthly Sales".to_string()),
        ..Default::default()
    };

    let chart = BarChart::new(data, options);
    chart.render_to_file("bar_chart.html").unwrap();
}

2. 创建折线图

use lowcharts::{LineChart, LineChartOptions, LineChartData};

fn main() {
    let data = LineChartData {
        labels: vec!["Mon", "Tue", "Wed", "Thu", "Fri"],
        datasets: vec![
            (vec![12.0, 19.0, 3.0, 5.0, 2.0], "Sales".to_string()),
        ],
    };

    let options = LineChartOptions {
        title: Some("Weekly Trend".to_string()),
        ..Default::default()
    };

    let chart = LineChart::new(data, options);
    chart.render_to_file("line_chart.html").unwrap();
}

3. 动态更新图表

lowcharts支持动态更新数据:

use lowcharts::{BarChart, BarChartOptions, BarChartData};
use std::thread;
use std::time::Duration;

fn main() {
    let mut data = BarChartData {
        labels: vec!["Q1", "Q2", "Q3", "Q4"],
        datasets: vec![
            vec![10.极, 20.0, 30.0, 40.0],
        ],
    };

    let options = BarChartOptions::default();
    let mut chart = BarChart::new(data.clone(), options);
    
    // 启动一个简单的HTTP服务器来展示图表
    chart.serve(8080).unwrap();
    
    // 模拟动态数据更新
    for i in 1..=5 {
        thread::sleep(Duration::from_secs(1));
        
        // 更新数据
        for value in &mut data.datasets[0] {
            *value += 5.0;
        }
        
        // 推送更新到浏览器
        chart.update_data(data.clone()).unwrap();
    }
}

高级功能

自定义样式

use lowcharts::{BarChart, BarChartOptions, BarChartData, Color};

fn main() {
    let data = BarChartData {
        labels: vec!["Red", "Blue", "Yellow", "Green"],
        datasets: vec![
            vec![12.0, 19.0, 3.0, 5.0],
        ],
    };

    let options = BarChartOptions {
        title: Some("Color Preferences".to_string()),
        colors: vec![
            Color::new(255, 99, 132),   // 红色
            Color::new(54, 162, 235),    // 蓝色
            Color::new(255, 206, 86),    // 黄色
            Color::new(75, 192, 192),    // 绿色
        ],
        ..Default::default()
    };

    let chart = BarChart::new(data, options);
    chart.render_to_file("styled_chart.html").unwrap();
}

多数据集图表

use lowcharts::{LineChart, LineChartOptions, LineChartData};

fn main() {
    let data = LineChartData {
        labels: vec!["2015", "2016", "2017", "2018", "2019"],
        datasets: vec![
            (vec![10.0, 30.0, 25.0, 40.0, 35.0], "Product A".to_string()),
            (vec![15.0, 25.0, 35.0, 30.0, 45.0], "Product B".to_string()),
        ],
    };

    let options = LineChartOptions {
        title: Some("Product Sales Comparison".to_string()),
        ..Default::default()
    };

    let chart = LineChart::new(data, options);
    chart.render_to_file("multi_line_chart.html").unwrap();
}

输出选项

lowcharts支持多种输出方式:

  1. 保存为HTML文件:
chart.render_to_file("chart.html").unwrap();
  1. 启动本地服务器实时查看:
chart.serve(8080).unwrap();  // 在浏览器访问 http://localhost:8080
  1. 获取HTML字符串:
let html = chart.render_to_string().unwrap();

注意事项

  • lowcharts主要生成基于浏览器的可视化图表,需要HTML环境
  • 对于复杂的可视化需求,可能需要考虑更强大的库如plotters
  • 动态更新功能需要浏览器支持WebSocket

lowcharts非常适合需要快速集成简单图表功能的Rust应用,特别是那些需要轻量级解决方案的项目。

完整示例代码

下面是一个完整的lowcharts使用示例,展示了如何创建并自定义一个柱状图:

use lowcharts::{BarChart, BarChartOptions, BarChartData, Color};

fn main() {
    // 准备图表数据
    let data = BarChartData {
        labels: vec!["第一季度", "第二季度", "第三季度", "第四季度"],
        datasets: vec![
            vec![150.0, 220.0, 180.0, 300.0],  // 销售额数据
        ],
    };

    // 配置图表选项
    let options = BarChartOptions {
        title: Some("2023年度销售数据".to_string()),
        colors: vec![
            Color::new(75, 192, 192),  // 蓝绿色
        ],
        show_legend: true,
        ..Default::default()
    };

    // 创建图表实例
    let chart = BarChart::new(data, options);
    
    // 输出图表到HTML文件
    match chart.render_to_file("annual_sales.html") {
        Ok(_) => println!("图表已成功保存到 annual_sales.html"),
        Err(e) => eprintln!("保存图表失败: {}", e),
    }
}

这个示例创建了一个展示2023年各季度销售数据的柱状图,使用了自定义颜色,并添加了标题。图表会保存为HTML文件,可以直接在浏览器中打开查看。

回到顶部