1 个不稳定版本

0.1.0 2019年11月24日

#180可视化

GPL-3.0-only

77KB
2K SLoC

Build Status dependency status Documentation Status docs.rs Documentation crates.io page PyPI matrix .github/workflows/ci.yml

logo

在您的桌面上进行实时时间序列分析!

关于

Lognplot 是一个时间序列数据的图形查看器。与其他该领域的许多项目不同,lognplot 不是一个托管网络应用。它是一个桌面应用,可以可视化您应用中的数据。这可以是嵌入式、机器人、移动、PC 或 PLC 应用。

功能

  • 实时绘图数据同时保持响应性
  • 通过 TCP/IP 链路向 GUI 发送数据。
  • 两种 GUI 实现
    • python GUI 实现(基于 PyQt5)
    • rust GUI 实现(基于 gtk-rs / cairo)
  • 客户端库支持
  • 将数据导出为 HDF5
  • 数据适配器 支持
    • ADS
    • MQTT
    • ROS2

视频

这些是工具的记录视频

屏幕截图

这是 lognplot python 应用的示例屏幕截图,可视化了 1000 万个数据点。请注意,缩放仍然平滑进行。

screenshot3

这是使用 rust 实现的 GTK 图形界面的示例屏幕截图,同样可视化了 1000 万个数据点。

screenshot4

这是当缩放时绘图窗口的示例。请注意,并不是所有点都会显示,而是将数据聚合为 min/max/mean/stddev 线来可视化。

screenshot1

当放大数据时,个别数据点就会出现。

screenshot2

安装

请注意,目前您需要从 GitHub 获取最新的 git 版本。

首先克隆此存储库

$ git clone https://github.com/windelbouwman/lognplot.git

对于 Python,按照以下步骤操作

$ cd lognplot/python
$ pip install .
$ python -m lognplot

对于 Rust,按照以下步骤操作

$ cd lognplotgtk
$ cargo run --release

Rust 和 Python 都发布了软件包

Rust 包:https://crates.io/crates/lognplot

Python 包:https://pypi.ac.cn/project/lognplot/

需求

对于工具的 GTK 变体,您需要安装以下内容

  • cairo-gobject-devel
  • pango-devel
  • atk-devel
  • gdk-pixbuf2-devel
  • gtk3-devel
  • hdf5-devel

用法

要使用此代码的 Python 部分,以演示方式启动 softscope

$ cd python
$ python softscope.py

这将弹出绘图窗口。可以使用键盘键 w,a,s,d 和 i,j,k,l 进行缩放和滚动。按空格或回车键自动调整大小。数据是 10 kHz 生成的信号。

另一个演示是 softscope 服务器。这将打开一个 TCP/IP 端口,可以接收数据。

$ cd python
$ python -m lognplot

softscope 现在已准备好通过网络接收流数据。

接下来,启动演示数据源,它将通过TCP将数据发送到这个GUI

$ cd demo
$ python noize_source.py

另一个服务器演示是代码的Rust部分。按照这种方式启动GUI

$ cd lognplotgtk
$ cargo run

此应用程序将能够通过TCP/IP接收数据。

从C代码发送数据

要从C代码发送数据,请参考位于 demo/c 的示例。此示例使用clognplot rust crate,这是一个静态库,可以从C使用。生成的C程序将通过TCP/IP连接并使用Rust crate的部分将数据发送到绘图工具。

将数据导出为 HDF5

要进一步处理数据(例如,在Python脚本中),您可以使用“文件”->“保存”将所有捕获的数据保存为HDF5文件。

此保存的HDF5文件的使用示例


import h5py
from matplotlib import pyplot as plt

f = h5py.File('datorz.h5', 'r')
group = f['my_datorz']
signal = group['My_signal']
plt.plot(signal[:,0], signal[:,1])
plt.show()

文档

Python用户文档可在此处找到:https://lognplot.readthedocs.io/en/latest/ Rust用户文档可在此处找到:https://docs.rs/lognplot

计划

这是一份待办事项清单

  • PyQt5实现
  • gtk-rs实现

实时数据可视化的要求

  • 添加数据结构以支持追加新数据
  • 数据点聚合以支持缩放和显示最小/最大/平均值线

类似项目

这里有一份有趣的类似项目列表。你知道其他项目吗?请提交一个pull request或issue!

性能分析

为了优化GUI体验,您可以按照以下方法对Rust lognplot gui进行性能分析。

修改 Cargo.toml 文件以包含此片段

[profile.release]
debug = true

这将构建为发布模式,但包含调试符号。

现在,以发布模式构建

$ cargo build --release

接下来,使用linux perf工具对应用程序进行性能分析

$ perf record -F 99 --call-graph dwarf target/release/lognplotgtk

现在进行一些密集的工作。完成后,关闭GUI。

分析perf结果

$ perf report

lib.rs:

日志和绘图库。

此库用于从系统记录数据,并同时绘制数据。

在调试测试中的系统时,这很有用。

依赖关系

~0–1.5MB
~22K SLoC