【开源项目】guff绘图工具
简介
guff是一个绘图工具,guff可以从一个文件里或者从一个标准输入stdin中读取数据流并绘制图形。这个绘图工具可以让你在命令行环境下,方便快捷的将数据绘制成图形,查看数据的粗略分布,也可以直接生成SVG图像。
guff 是 MacGuffin 的缩写。
作者 Scott Vokes,并根据ISC License发布。
项目地址:
https://github.com/silentbicycle/guff
安装
guff只依赖于标准POSIX环境。
直接输入make来编译构建。
但是我在linux中直接输入make进行编译发现编译不过,缺少链接数学库,就在Makefile中手动添加了-lm,就可以编译过了。
如果要运行测试,则输入make test。
绘制效果
运行示例,如下:
$ wc -l *.c | grep -v total | sort -nr | awk '{print($1)}' | ./guff -d 72x30
x: [0 - 15] y: [0 - 377] -- 0: #
+
#
|
|
|
+
|
|
|
|
+ #
| #
|
| # # #
| #
+
|
|
| #
| #
+
|
|
| # #
| #
+ #
| #
|
| # #
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
可以看到生成了数据图表。
示例是将当前目录中的所有.c文件的行数从大到小排序,然后输出图表。
使用方法
Usage: guff [-A] [-c] [-d WxH] [-f] [-h] [-l xyc]
[-m MODE] [-r] [-s] [-S] [-x] [FILE]
通用设置选项
-d WxH
设置尺寸(宽度和高度)。格式为“-d WxH”,例如:"-d 72x40"或"-d 640x480"。
-f
翻转X轴和Y轴。
-h
打印帮助信息。
-l xyc
将X、Y或点数设置为对数刻度。
-m MODE
将模式设置为dot(默认)、line(仅SVG)或count(跟踪点的密集程度)。
-x
将第一列作为其他列的X值。否则,行号将用于X值。
SVG选项
以下选项只支持SVG:
-c
使用色盲安全的默认颜色。
-r
为每一列画一条线性回归线。
其他选项
生僻的选项,主要用于内部测试。
-A
不画坐标轴。
-S
禁用流模式(在第一个空行退出)。
退出状态
返回0。
输入数据的格式
guff需要读取一连串的浮点数,数据中间用空格或者逗号隔开。
例如:
1 2.0 3
或者
1,2,3
以上两种情况下读取到的数据都是1.0,2.0,3.0。
如果出现多个分隔符,则该值将被视为该列的行中缺少该值。
例如:
1,,3
读取到的数据是1.0, [缺失值], 3.0。
任何以“/”或“#”开头的行都将被忽略,而任何其他 strtod(3) 认为格式错误的数字(例如“-”)都将导致该行的其余部分被跳过。
空白行使 guff 进行绘图和重置。
示例程序
示例一
直接运行guff并手动输入数据,输入数据1,2,3,4,5,最后输入一个空行结束。
如下:
$ ./guff
1
2
3
4
5
x: [0 - 4] y: [0 - 5] -- 0: #
+
| #
|
|
|
+
|
|
|
| #
+
|
|
|
|
+
| #
|
|
|
+
|
|
|
| #
+
|
|
|
|
+
#
|
|
|
+
|
|
|
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
示例二
生成SVG,如下:
$ ./guff -s
1
2
3
4
5
<svg xmlns="http://www.w3.org/2000/svg" width="320" height="200" version="1.1">
<!-- Generator: guff 0.1.0 -->
<rect x="0" y="0" width="320" height="200"
fill="black" stroke-width="2" stroke="black" />
<line x1="0" y1="0" x2="0" y2="200" stroke="lightgray" stroke-width="2" />
<line x1="40" y1="193" x2="40" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="80" y1="193" x2="80" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="120" y1="193" x2="120" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="160" y1="193" x2="160" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="200" y1="193" x2="200" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="240" y1="193" x2="240" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="280" y1="193" x2="280" y2="205" stroke="lightgray" stroke-width="1" />
<line x1="0" y1="199" x2="320" y2="199" stroke="lightgray" stroke-width="2" />
<line x1="0" y1="159" x2="6" y2="159" stroke="lightgray" stroke-width="1" />
<line x1="0" y1="119" x2="6" y2="119" stroke="lightgray" stroke-width="1" />
<line x1="0" y1="79" x2="6" y2="79" stroke="lightgray" stroke-width="1" />
<line x1="0" y1="39" x2="6" y2="39" stroke="lightgray" stroke-width="1" />
<circle cx="0" cy="159" r="2" stroke="#377eb8" />
<circle cx="79" cy="120" r="2" stroke="#377eb8" />
<circle cx="159" cy="80" r="2" stroke="#377eb8" />
<circle cx="238" cy="41" r="2" stroke="#377eb8" />
<circle cx="318" cy="1" r="2" stroke="#377eb8" />
</svg>
示例三
从文件中读取数据,这里使用一个保存着正弦表的文件sin.txt ,使用方式如下:
$ ./guff sin.txt
x: [0 - 24] y: [-1 - 1] -- 0: #, 1: @, 2: *, 3: ^, 4: !, 5: ~, 6: %, 7: A, 8: B, 9: C, 10: D, 11: E, 12: F, 13: G, 14: H, 15: I, 16: J, 17: K, 18: L, 19: M, 20: N, 21: O, 22: P, 23: Q, 24: R, 25: S, 26: T, 27: U, 28: V, 29: W, 30: X, 31: Y
+
| W Q
| W ^ W G
| G U
| W W C
+ K M
| A U
| W W ~
| O G
| G O
+ ~ U
| W W ~
| O E
| I K
| C S
+ W @ W @
| S A
| M G
| G M
| A S
@--@-+----+----+----+----+----+----W--#-+----+----+----+----+----+----V-
| % R
| F L
| L F
| R %
+ V # V #
| % R
| H L
| N D
| T !
+ V ! V
| F N
| N F
| V V !
| % T
+ J L
| V V B
| D T
| V # V H
| V R
示例四
从文件中读取数据,并保存为svg文件 ,使用方式如下:
$ ./guff -s sin.txt > sin.svg
打开sin.svg:
示例五
生成的图形X轴和Y轴翻转:
$ ./guff -f sin.txt
x: [-1 - 1] y: [0 - 24] -- 0: #, 1: @, 2: *, 3: ^, 4: !, 5: ~, 6: %, 7: A, 8: B, 9: C, 10: D, 11: E, 12: F, 13: G, 14: H, 15: I, 16: J, 17: K, 18: L, 19: M, 20: N, 21: O, 22: P, 23: Q, 24: R, 25: S, 26: T, 27: U, 28: V, 29: W, 30: X, 31: Y
+
*%BFJLPTV
|
#!BFJLPTV |
*BFJNRV |
+
*BHLRV |
#DLTV |
|
JV |
+
VB |
VRH% |
|
VPJD%# |
VTPJFB!# +
|
VTRNJFB%* |
VTPLJFB%*|
|
WUQMKGCA^
|
| WUQMKGC~@
| WUSOKGA^
|
+ WSMIC^
| WUME@
|
| WK
|
+ CW
| AISW
|
| @AEKQW
| @~CGMQUW
+
| ^ACGKOSW
|^ACGKMQUW
|
+----+----+----+----+----+----+----@----+----+----+----+----+----+----+-
其他更多的使用方法请参考目录中man文件夹中的guff.1.html。
本文链接:https://blog.csdn.net/u012028275/article/details/121846597