gnuplot 尝鲜

gnuplot是一款画图软件,可以将数据以一定的方式显示在坐标系中,可以生成二维三维的数据分布。我们依赖这种数据可视化做到对于数据的分析。在各种操作系统性能分析中,该工具也占有举足轻重的位置。这篇文章默认你已经懂得了gnuplot基本操作,我们试着将数据集以可视化的方式表现出来。

在linux终端下,输入gnuplot,可以直接进入到该软件操作界面下:


➜  Desktop  gnuplot         
 
    G N U P L O T
    Version 5.0 patchlevel 0    last modified 2015-01-01 
 
    Copyright (C) 1986-1993, 1998, 2004, 2007-2015
    Thomas Williams, Colin Kelley and many others
 
    gnuplot home:     http://www.gnuplot.info
    faq, bugs, etc:   type "help FAQ"
    immediate help:   type "help"  (plot window: hit 'h')
 
Terminal type set to 'qt'
gnuplot> 

一般情况下,我们可以在命令行中断直接一步一步设置我们需要设置的图像,但是这里我们直接使用bash脚本方式生成图像,其中脚本模板如下:


#!/bin/bash
gnuplot<<FFF
...
 
FFF
exit 0

中间省略号的部分就是我们在命令行中输入的,比如set terminal png truecolor 就是设置gnuplot因该采用什么样的格式;set autoscale代表让gnuplot自己计算x轴y轴范围。如果x轴是特殊的数值,比如时间那么使用%d %n %y

	
set xdata time
set timefmt "%H:%M:%S"

来定义x轴数据格式

如果我们在一个二维坐标系中画多条折线图,有两种方式,我们可以在每个文件中定义一条折线的坐标值。然后使用下面这种方式,一个filename对应一条折线,title是关键字,代表折线名字,with也是关键字,代表图的类型,这里是表示由线组成的点,pointtype 4表示用空心方块中重点标示每个点。你可以修改后面的数字,这样会得到不同的线型。


plot 'filename' title 'Sequential Read' with linespoints pointtype 4,'filename2' title '...' with linespoints pointtype 4

第二种也是一种方式,但是我不太常用。第二种方式主要把每个filename中的数据都放在同一个文件中,每一列数据代表一组线,他们的纵坐标都是同第一列。每一列数据中间用空格分离,使用using 关键字。比如using 1:2,表示使用第1列作为x轴,绘制第2列数据。

	
plot 'test.log' using 1:2 title "line 1",using 1:3 title "line 2"

如果对图像要求比较高,还可以设置网格 set grid;设置x轴y轴范围set xrange [“13:00:00″:”17:00:00″] set yrange[“…”:”…”]设置x轴y轴标签 set xlabel “…” set ylabel “…”

以上都是折线图,下面我们来尝试画一个柱状图:

对于柱状图,其实只需要设置set style data histograms 就可以生成图形,但是我们必须对图形进行微调。gnuplot 按以下次序绘制框的边框:顶、底、左和右,值分别为 1、2、4、8。要想删除一条或多条边框线,只需提供相应值的和。在这个示例中,使用 -1 选项删除底部边框线。指定 fill 选项就会用默认颜色填充框:

	
set style fill solid 1.00 border -1

对于 x 坐标,这里不使用时间,而是使用组名称。使用 xtic 选项让 gnuplot 沿着 x 轴放置 tic 和数据标签(第 1 列)。在这里就是组名称。但是,有时候标签包含许多字符,或者 xtic 的时间格式在图形上的 tic 之间放不下。这时就会看到标签相互重叠。为了避免这个问题,把标签旋转 90 度(通过试验找到合适的角度),让它们垂直显示。可以使用以下命令来实现这种效果:

	
set xtic rotate by 90

其中这个90度可以为负。

第 2 列中的数据使用第 1 列(x 数据)作为参照:

	
2:xtic (1)

最后生成的柱状图是:

如果多个柱状图为一个x轴为参考点,那么可以使用


plot "disk.txt"  using 2:xtic(1) title "Oct-09 data growth(gb)", '' using 3 title "Nov-09 data growth(gb)", '' using 4 title "Dec-09 data growth(gb)"

###参考:

gnuplot 入门教程1 : http://blog.csdn.net/liyuanbhu/article/details/8502383

gnuplot 入门教程2 : http://blog.csdn.net/liyuanbhu/article/details/8502418

gnuplot 入门教程3 : http://blog.csdn.net/liyuanbhu/article/details/8502450

gnuplot 入门教程4 : http://blog.csdn.net/liyuanbhu/article/details/8502461

gnuplot 让您的数据可视化 : http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html

使用 gnuplot 在网页中显示数据 : http://www.ibm.com/developerworks/cn/aix/library/au-gnuplot/index.html