0.1.0 |
|
---|
#65 在 #chart
47KB
1K SLoC
Plotka
Plotka 允许您通过 Websocket 轻松广播您的数据。它还可以托管您的 JS 客户端,以便您可以在浏览器中绘制数据。
它可以作为 Matplotlib 等软件的替代品。您可以在您喜欢的语言中编写您的模拟/计算/等等,并将结果通过 Plotka 输出。然后它将数据发送到您的 JS 客户端。
示例
$ mysimulation | plotka --static-path . csv --headers mass velocity position
$ echo my-results.txt | plotka --static-path . json
解析和数据格式
目前 Plotka 只能处理 CSV 和 JSON。我计划添加 TSV 支持。
Plotka 要求每条记录都必须有相同的字段。记录由换行符分隔。值以浮点数或整数存储。字段是强类型的,因此它们必须在每条记录中具有相同的类型。字段的类型根据它是否可以解析为整数来评估。以 .0
结尾的数字将被解析为浮点数。
CSV
csv
子命令接受 2 个参数。
--headers
参数(显然)允许您指定标题。目前它是必需的,但可能会更改。--delimiter
参数允许您更改分隔符。
JSON
json
子命令不接受任何参数。输入的每一行都必须是一个有效的 JSON 对象。例如,如果文件以括号开始或结束,您必须将其删除。
设置 JS 客户端
默认情况下,Plotka 将其内部服务器绑定到 127.0.0.1:8080
。您可以通过设置 --ip-address
参数来更改它。您的静态文件将在 /static/<path-to-your-file>
处托管。假设您的文件夹看起来像这样
my-static-files
├── index.html
└── js
└── main.js
您可以通过 127.0.0.1:8080/static/js/main.js
访问您的主脚本。 /
将您重定向到 /static/index.html
,因此您无需在 URL 栏中输入。
一个基本的 JS 客户端可能如下所示
const url = `ws://${window.location.host}/ws/`;
const ws = new WebSocket(url);
ws.onmessage = (e) => {
const message = e.data;
console.info("Received a message.");
const request = JSON.parse(message);
console.log(`Method name: ${request["method"]}`);
console.log(`Params: ${request["params"]}`);
}
然后您可以使用您选择的绘图库。
如果您不知道使用哪个,请查看这些
接收更新消息
每个新连接的WS客户端将接收到一条包含记录存储最新状态的消息。这些消息遵循JSON RPC格式。
-
initStorage
消息在data
字段中包含一个JSON对象(记录)的列表。{ "method": "initStorage", "params": { "data": [ { "x": 10, "y": 1.15 }, { "x": 11, "y": 1.16 }, { "x": 12, "y": 1.17 }, ... ] } }
-
pushRecord
消息在record
字段中包含一个单一的JSON对象。{ "method": "pushRecord", "params": { "record": { "x": 13, "y": 1.18 } } }
待办事项
-
修复错误处理并添加文档(!)。
-
将
--static-path
参数设置为可选,并默认设置为当前目录。 -
将
--ignore-first
参数添加到CSV子命令,以便用户可以选择是否忽略第一行。 -
添加对TSV的支持。
-
添加shell自动补全和手册。
-
发布二进制文件。
-
添加基准测试。
-
添加允许以固定大小的数据包更新数据的方法。
我想提供一个机制,允许你在一次只绘制一定数量的数据点时轻松管理数据。例如,如果你使用的是热图,这可能会很有用。
-
添加对正则表达式的支持(?)。
-
添加对日期解析的支持(?)。
警告
Plotka不会在您的计算机上保存数据。停止Plotka后,数据将会丢失。但是,这可能会在未来改变。
注意
Plotka处于alpha阶段。此外,请注意,我是一个业余爱好者,我主要是为了自己的需求创建它的。我将感激您的反馈。
依赖项
~29–40MB
~631K SLoC