#gnuplot #plot #graph #user #customization #api #repo

gnuplotter

一个简单的实用库,用于在Rust中使用gnuplot库

2次发布

0.2.3-alpha2024年2月16日
0.2.2-alpha2024年2月14日
0.1.6-alpha 2024年1月9日

#134 in 可视化

Download history 4/week @ 2024-03-10 57/week @ 2024-03-31

每月85次下载

自定义许可

51KB
1K SLoC

GNUPlotter

用于在Rust中访问gnuplot库的库。目前,它主要关注探索性工作,以找到适合我自己项目用例的API,并且目前并不针对更广泛的公众。


lib.rs:

GNUPlotter

GNUPlotter旨在使Rust代码能够使用gnuplot绘图工具。这个库还处于非常早期阶段,我仍在积极考虑其使用。与手动编写gnuplot脚本相比,在这个库上工作可能不是好的时间投资。这个库的主要卖点是可以定义代码库中其余部分的图表。这通常使对整个代码库的推理更容易。它还允许生成的图表以它们在代码库中语义上如何融入更大的整体来描述。

设计目标

目前只有两个主要的设计目标

  • 轻松访问gnuplot功能
  • 轻松定制以满足工程用户的需要

轻松访问gnuplot功能

对于不熟悉gnuplot的工程师来说,使用这个工具可能会感到不知所措。它提供了许多命令和选项,其中大多数用户可能不需要。一个在Rust中记录常用功能的界面将使使用gnuplot变得更加容易,但会牺牲一些功能。

此外,工程师可以选择扩展这个库来扩展gnuplotter提供的gnuplot功能。这个扩展可以很容易地被组织中的其他工程师使用。

强调最后一点,gnuplotter主要提供了一种从Rust代码中轻松访问gnuplot的方法。它并不试图做到全面,但提供了一种扩展它的方法,这样组织中的大多数工程师就不需要gnuplot知识。

通过提供灵活的API来自定义的轻松性

处理绘图库的一种方法是在支持某一类图表的基础上,然后实现一个非常灵活的版本。您会根据调用的方法来决定哪些功能要启用。对于使用此类库的工程师来说,有很多API细节需要熟悉。我自己问了一个问题,如何简化这个过程。如果我只想要一个x轴标签、一个y轴标签和标题,为什么我要关心相对复杂的API的其余部分呢?

因此,gnuplotter的目标是尽可能隐藏图表类型的实现细节。一个工程师可以声明式地定义一个新的图表类型,而其他工程师从那时起只需要关注这个非常有限的API。

换句话说,gnuplotter允许根据用户的具体需求组合新的图表类型,而我们对此知之甚少。我们的目标是提供在可用绘图功能数量上的灵活性,同时根据非常具体的用户环境简化绘图API。

解决方案

Gnu命令

向库中添加功能很简单。只需将它们编码在实现GnuCommandFactory特质的struct中。一个GnuCommand不过是一种生成字符串表示的方法,您在通过CLI或脚本向gnuplot发送命令时可以使用。

组合命令

这些命令随后在队列中组合。例如,以下链接中的struct包含其他元素,如Axis<T>,或者实现Required<T>的ADT等,它们实现GnuCommandFactory以将命令组合成一个单一队列。

使用gnuplot后端渲染图表

最后,通过在Rust程序中调用gnuplot命令,将所有收集到的命令写入gnuplot。这是通过一个简单的CanRender特质提供的,它可以通过Plot宏轻松推导出来。

示例

基本演示

基本演示构建了一个简单的二维图表,其中包含两个标签轴(X和Y),其中一个是可选的。它展示了如何定义图表struct以及用户如何使用它。

依赖关系

~5–14MB
~181K SLoC