【开源项目】guff绘图工具

【开源项目】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:

sin

示例五

生成的图形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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值