1. GNUPLOT 简介及安装
1.1. GNUPLOT 简介
Gnuplot 是一种免费分发的绘图工具,可以移植到各种主流平台。它可以下列两种模式之一进行操作:当需要调整和修饰图表使其正常显示时,通过在 gnuplot 提示符中发出命令,可以在交互模式下操作该工具。或者,gnuplot 可以从文件中读取命令,以批处理模式生成图表。
Gnuplot 是在 1986 年由 Colin Kelley 和 Thomas Williams 最初开发的。许多参与者都在为不同的“终端”创建变种方面做出了贡献。在 1989 和 1990 年,这些变种被合并到 gnuplot 2.0 中。2004 年 4 月,发布了 4.0 版本。您可别看它叫GNUPLOT,但是它和GNU是没有任何关系的, gnuplot 不包含在 GPL 中,也与 GNU或 Free Software Foundation 无关。 一份较老的 GNU 公告解释说:“让人奇怪的是,[gnuplot] 既不是为 GNU Project 编写,也不是因为其而命名的;这个名称纯属巧合。各种 GNU 程序都使用 gnuplot。”
1.2. GNUPLOT 安装
我的机器是Debian 7,GNUPLOT在Debian上安装Debian 使用apt-get 即可:
dslab@wheezy:~$ sudo aptitude search gnuplot
[sudo] password for dslab:
p gnuplot - Command-line driven interactive plotting p
p gnuplot-doc - Command-line driven interactive plotting p
p gnuplot-mode - Yet another Gnuplot mode for Emacs
c gnuplot-nox - Command-line driven interactive plotting p
p gnuplot-qt - Command-line driven interactive plotting p
i gnuplot-x11 - Command-line driven interactive plotting p
p libchart-gnuplot-perl - module for generating two- and three-dimen
p libgnuplot-ocaml-dev - OCaml interface to the gnuplot utility
v libgnuplot-ocaml-dev-t2kk1 -
p libgnuplot-ruby - Transitional package for ruby-gnuplot
p libgnuplot-ruby1.8 - Transitional package for ruby-gnuplot
p libgraphics-gnuplotif-perl - dynamic Perl interface to gnuplot
p python-gnuplot - A Python interface to the gnuplot plotting
p ruby-gnuplot - Ruby library to interact with gnuplot
但是安装的时候安装的是 gnuplot-x11, 因为我之前使用sudo apt-get install gnuplot 后发现画图有点问题,后来安装了gnuplot-x11 就一切正常了!
dslab@wheezy:~$ gnuplot -V
gnuplot 4.6 patchlevel 0
我们可以看到,现在安装使用的是gnuplot 4.6 版本!
2. 使用GNUPLOT画图
2.1. GNUPLOT简单画图
使用gnuplot 与shell 和Python类似,在终端里输入gnuplot,终端就会打开一个以gnuplot> 开头的gnuplot命令行模式,just like this :
我们在命令行中输入 plot sin(x) ,我们会发现,gnuplot 打开了一个窗口并在这个窗口中画出了sin(x)的图(如上图所示)。
更多关于这种简单的GNUPLOT 画图使用,可以看一下我之前转载的一篇博客《 gnuplot 入门教程
》
或者,下载一些比较齐全的GNUPLOT手册:
Gnuplot 快速入门
科学绘图软件 Gnuplot 使用指南
gnuplot 中文手册 修订2
2.2. 使用GNUPLOT为cyclictest的测试结果画图
在《 cyclictest 测试以及原理浅谈
》 一文中,我们使用 “
sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000
” 测试系统的延迟,从而判断系统实时性,那么结果是下面这样的一系列数据:
# Histogram
000000 000000
000001 111448
000002 060272
000003 000714
000004 000344
000005 000231
.....
000097 000002
000098 000002
000099 000002
# Total: 000999888
# Min Latencies: 00001
# Avg Latencies: 00006
# Max Latencies: 00463
# Histogram Overflows: 00112
# Histogram Overflow at cycle number:
# Thread 0: 02985 06044 06107 08644 ...
这样的一系列数据我们当然不容易判断,我们可以使用“ sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000 | tee /tmp/log ”或者 “ sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000 >/tmp/log ”将测试结果导入到一个日志文件,然后使用gnuplot 画出图,我们老师教导我们“字不如表,表不如图”,所以图是最容易被人理解最容易直观判断的表达形式。
下面我将一步一步介绍我们如何将测试结果 /tmp/log 这样的日志文件画成我们满意的图
2.2.1. 画出初步图
gnuplot> plot "/tmp/log" with lines
2.2.2 调整坐标
当前我们可以看到使用“ plot "/tmp/log" with lines ”后plot画出了统计图,但是我们可以看到第一个峰值只能判断在5000以下,不能判断在具体什么数值,我们可以调整坐标:
gnuplot> set logscale y // 对Y 坐标进行自动调整 ,我们可以根据图进行手动调整,命令为 set yrange ["0" : "5000"] ,但是对于我们cyclictest 中的大量数据来说还是自动调整比较好!
gnuplot> plot "/tmp/log" with lines // 查看下调整后的效果
gnuplot> set logscale x // 对X 坐标进行自动调整
gnuplot> plot "/tmp/log" with lines
2.2.3 设置保存文档
我们可以通过先用“ set term post eps color solid enh ”指定彩色的eps格式,再用 “ set output ‘mycyclictestlog.eps’ ” 指定保存的文件名。
如果想保存成png 格式的图片,可以使用 set terminal png truecolor 再用 set output "test.png" 来保存彩色的png 格式图片。
2.2.4 设置图标信息
可以通过 set title "My first graph" 来指定图片中上标的文字。
可以通过 set grid 指定在图片中添加网格
可以通过 set xlabel 'latency(us)' 来设置横坐标文字 set ylabel 'times' 来设置纵坐标文字
2.2.5 重新构图并保存
使用上面的 plot "/tmp/log" with lines 重新构图,我们可以看到这一系列操作的成果。此时使用Ctrl+D 关闭gnuplot ,我们ls 查看会发现当前目录下多了个 myclclictest.eps,我么可以使用 evince mycyclictestlog.eps 打开查看效果。
3. GNUPLOT画图的脚本使用
对于GNUPLOT,我们也是可以使用shell 脚本自动生成的,这会大大便携了我们的生活!嘿嘿,比如我在cyclictest时使用了脚本生成了不同 interval 下的延迟图,我在下面会写个脚本自动生成我们需要的图片。
#!/bin/bash
echo "the data have dealed,we will paint the pic"
gnuplot << FFF 在这需要
set terminal png truecolor
set output "test.png"
set ylabel "Times"
set xlabel "latency(microseconds)"
set title "Different latency under different interval with cyclictest"
set logscale y
plot "hist_p4_i100" with lines, "hist_p4_i400" with lines ,"hist_p4_i1600" with lines
FFF
echo "the pic have done,named test.png"
exit 0
还是上面那句话,“ 字不如表,表不如图 ”,三个大量的数据我们没法作对比,而这样一个明显的数据图我们可以显而易见!比如说不同的interval下的延时还是很明显的对比!
===================================================
注:
【1】 GNUPLOT的官方主页 http://www.gnuplot.info/
【2】 gnuplot 让您的数据可视化 http://www.ibm.com/developerworks/cn/linux/l-gnuplot/
【3】 GNUPLOT使用技巧 http://linux.chinaunix.net/techdoc/develop/2009/07/21/1125242.shtml