相关文章推荐
另类的墨镜  ·  Matlab中错误使用 bsxfun ...·  2 年前    · 
文雅的莴苣  ·  webpack/vue-cli 中的 ...·  2 年前    · 

gnuplot 是一个用于生成趋势图和其他图形的工具。它通常用于收集基于时间的数据,但是不限于此;也可以使用静态数据。gnuplot 可以以批模式运行或动态运行,结果由图形查看程序或 Web 浏览器显示。本文演示如何使用 gnuplot 和批文件为从 sar 或其他数据源收集的数据生成图形。gnuplot 有许多命令选项,可以通过 set 操作符使用它们。但是,要想使用线或框生成图形,需要对文档有所了解。

在本文中,我将使用 Web 服务器提供图形。

gnuplot 概述

gnuplot 把原始表格数据转换为图形文件。流行的格式是 png、pdf 和 jpeg,然后可以把它们动态地或直接地传递给 X 终端、网页或通用的图形查看程序。还可以把图像导入文档。使用命令界面与 gnuplot 交互,使用 “set” 命令指定图像的格式和显示方式。这通常包括图像的大小、使用的颜色、刻度、x, y 坐标和输出图像名。然后,使用 plot 命令通过 gnuplot 引擎实际生成图像。还可以使用 splot 命令绘制 3D 图像。尽管可以使用命令界面以交互方式执行命令,但是最好的方法是使用配置文件,这样就可以通过 shell 'here' 文档方法使用文件中的变量(如果需要的话),从而重用配置文件。然后,通过管道把配置文件与 gnuplot 连接起来以生成图像文件。如果配置文件中有错误,在这个过程中会显示这些错误,并突出显示错误的位置。生成图像文件之后,就可以显示它们了。

与用于生成图形的任何数据收集过程一样,在把数据传递给 gnuplot 之前,必须对收集的数据做一些筛选。这可能包括删除数据文件中头尾不需要的信息;sed 和 awk 有助于满足任何文本筛选需求。

安装 gnuplot

可以从 AIX? 5L Source Packages 网站下载 rpm 形式的 gnuplot 4.2: http://www.perzl.org/aix/index.php

对于本文中的示例,除了 gnuplot,还需要一个正在运行的 http 服务器。

也可以从本文后面或 AIX toolbox 网站下载所需的依赖库和 http 服务器。

在安装 gnuplot 之前,一定要安装下面的 rpm 库,因为 gnuplot 需要这些库:

fontconfig-2.7.2-1.aix5.1.ppc.rpm
expat-2.0.1-2.aix5.1.ppc.rpm 
freetype2-2.3.9-1.aix5.1.ppc.rpm
zlib-1.2.3-5.aix5.1.ppc.rpm 
libpng-1.2.40-1.aix5.1.ppc.rpm
gd-2.0.35-4.aix5.1.ppc.rpm
libjpeg-7-1.aix5.1.ppc.rpm
libXpm-3.5.7-2.aix5.1.ppc.rpm 
 gettext-0.17-1.aix5.1.ppc.rpm
glib2-2.20.5-1.aix5.1.ppc.rpm

使用以下命令列出已经安装的 rpm:

# rpm –qa

最后,安装 gnuplot 包:

# rpm -ivh gnuplot-4.2.4-1.aix5.1.ppc.rpm 

运行 gnuplot 以测试它。这会显示 gnuplot 命令界面(用 quit 命令退出界面):

$ gnuplot
      G N U P L O T
        Version 4.2 patchlevel 4
        last modified Sep 2008
        System: 5.3
        Thomas Williams, Colin Kelley and many others
        Type `help` to access the on-line reference manual.
        The gnuplot FAQ is available from http://www.gnuplot.info/faq/
        Send bug reports and suggestions to <http://sourceforge.net/projects/gnu
Terminal type set to 'unknown'
gnuplot>

用 sar 创建图形

sar 可能是最常用的收集性能数据的方法,所以我们以它作为示例。清单 1(sarx.txt)是通过运行 sar 收集的数据,数据收集时间为 5 小时,每小时收集一次,输出已经经过筛选。


清单 1. sarx.txt

14:10:50 33 27 4 36 4.00 15:10:50 29 14 3 28 4.00 16:10:50 35 21 1 31 4.00 17:10:49 38 29 2 39 4.00 18:10:40 42 29 3 35 4.00

接下来,创建一个文件以包含生成图形所需的所有 gnuplot 命令。可以给这个文件起任何名字;在本文中,我把它命名为 sarx.conf。

为了能够生成图像,必须告诉 gnuplot 图形文件应该采用什么格式以及应该如何显示。清 单 2(sarx.conf)包含执行 set 操作的配置文件。以 # 字符开头的行是注释。我们仔细看看 清 单 2

set terminal png truecolor

首先设置终端类型,这告诉 gnuplot 生成的图像应该采用什么格式。本文使用 png (Portable Network Graphics) 格式。

set output "sarimage.png"

接下来,告诉 gnuplot 实际的输出图像文件名。在这里,文件名为 sarimage.png。

set autoscale

在生成图形时,需要指定数据的 x 和 y 轴范围。这个示例让 gnuplot 自己计算范围值。但是,可以修改这个选项(稍后演示)。

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

因为这个示例使用日期值作为数据的参照点,需要告诉 gnuplot 日期数据的格式。在 清 单 1 sarx.txt 中,日期格式为:

Hour:Minute:Seconds

根据 UNIX 日期表示法,日期变量应该放在双引号中。常用的其他格式包括:

%d  - day of month 1 -31
%m - month of year 1 -12
%y  - year 0-99
%b  - three character of month name , ie: jan ,feb
%B  - name of month

如果日期列采用 Hour-Minute 格式,就用 : set timefmt ″%H-%M″ 表示。

set style data lines

在显示这个图形时,绘制出的数据应该是一条平滑的数据线。常用的其他绘制格式包括:dots、boxes、errorbars、 candlesticks。

plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"

接下来,使用 plot 命令实际绘制或生成图形。首先,指定数据输入文件名,然后告诉 gnuplot 要绘制哪些列。在这个示例中,使用第 1 列作为 x 轴,绘制第 2 列数据,标题为 “%user”;然后绘制第 3 列,标题为 “%sys”。标题(即标签)显示在图形的右上角。在绘制时,第 2 列和第 3 列使用第 1 列作为 x 值。plot 命令中的每个 ‘using’ 语句由逗号分隔。下一节讨论为什么要使用两个单引号。

生成图像文件的命令格式为:

cat < conf file> | gnuplot

对于本文,我使用:

$ cat sarx.conf | gnuplot

现在会生成 sarimage.png 文件。为了查看这个图像,把这个文件复制到 Web 服务器文件系统中的 htdocs 目录中。

图 1(sarimage)显示使用提供的示例数据在 Web 浏览器中看到的输出。


清单 2. sarx.conf

#sarx.conf set terminal png truecolor set output "sarimage.png" set autoscale set xdata time set timefmt "%H:%M:%S" set style data lines plot "sarx.txt" using 1:2 title "%user", '' using 1:3 title "%sys"



图 1. sarimage
图 1. sarimage

绘图 选项的表示

在 plot 命令中可以使用缩写。例如,在最初的 plot 命令后面,其他 plot 命令选项都可以缩写,用选项的第一个字母表示。但是,对于本文,我只用缩写表示输入文件,即使用两个单引号表示输入文件 (sarx1.txt)。下面详细解释一下。第一个示例是本文中使用的表示法,第二个示例是缩写表示法,第三个示例是不使用任何缩写的完整命令语句。这三 个示例产生相同的输出。

plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"
plot "sarx1.txt" using 1:2 title "%user", '' u 1:3 t "%sys"
plot "sarx1.txt" using 1:2 title "%user",\
″sarx1.txt'' using 1:3 title "%sys"

在向其他用户显示图形时,有时候应该包含明确的标签和标题,以便用户了解数据的意义。为了包含 x 和 y 标签,应该使用 xlabel 和 ylabel 命令并把标签文本放在引号中:

set ylabel " y line info here"
set xlabel " x line info here"

使用 title 命令添加图形的标题:

set title "main title info here"

在生成图形时,gnuplot 使用自己的默认颜色。在默认情况下,在白色背景上生成图形;这对于可能要打印的图形是有意义的。但是,可以使用颜色编码指定任何颜色,颜色编码以字母 x 开头,用十六进制表示。十六进制编码的格式为:

xrrggbb

在 Google 上搜索 ‘hex color codes’ 可以找到十六进制的颜色编码表。

覆盖 gnuplot 默认颜色的次序为:

background
border 
plotting lines

浅灰色的十六进制表示为:C9C9C9

可以使用以下命令生成浅灰色背景的图形:

set terminal png  xC9C9C9

注意,在以上命令中必须替换终端类型 png 的 truecolor 选项,这会覆盖 gnuplot 使用的默认颜色。因为我没有指定其他颜色以覆盖默认设置,所以对于图形的其他颜色,gnuplot 仍然使用自己的默认颜色。

在查看图形时,使用网格作为参照点也非常有用。下面的命令使用 grid 选项让 gnuplot 在图形上加上网格:

set grid

可以隐式地设置 x 和 y 坐标;但是,要确保指定的范围不小于数据的范围,否则无法绘制图形。对于 清 单 1 中的示例数据,x 坐标(时间)的范围是从 14:10:50 到 18:10:40。

y 坐标(第 2 列和第 3 列)的范围是从 14 到 50。

可以根据这些信息指定自己的范围。下面的示例使用的 x 范围从 14:00 到 18:15,y 范围从 10 到 50。

set xrange ["14:00:00" : "18:15:00"]
set yrange ["10:00" : "50:00" ]

在 清 单 3 中使用这些修改,生成的图形输出见 图 2


清单 3. sarx2.conf

#sarx2.conf set terminal png xC9C9C9 set output "sarimage.png" set autoscale set xdata time set timefmt "%H:%M:%S" set ylabel "Performance" set xlabel "Time" set title "Sar Output Example" set xrange ["14:00:00":"18:15:00"] set yrange ["10:00" : "50:00" ] set grid set style data lines plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"



图 2. sarimage2
图 2. sarimage2

gnuplot 和柱状图

还可以使用柱状图或框图表示数据,有时候这比使用静态数据更合适。清单 4 是从一台 AIX 机器获得的用户组用户总数。第 1 列包含 AIX 组名,第 2 列包含成员总数。


清单 4. grpdata.txt

staff 54 apps 22 sybgrp 12 db2grp1 29 dasdm 8 dstage 21 dsgrp 8 batch 28 db2prd 1

要想使用柱状图,只需告诉 gnuplot 应该使用柱状图生成图形:

set style data histograms

默认生成的柱状图的框没有粗线边框,框中也没有填充颜色。但是,如果指定边框,在框的底边沿着 x 轴可能有两条粗线(这看起来不太美观)。

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

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

  2:xtic (1)

在生成图形时,给数据加上标题 “apps groups numbers”:

plot "grpdata.txt" using 2:xtic(1) title "apps group numbers"

使用以下命令生成图像 grpimage.png:

$ cat grphist.conf | gnuplot

清单 5 包含生成图像的 gnuplot 命令,输出见 图 3


清单 5. grphist.conf

# grphist.conf set terminal png truecolor set output "grpimage.png" set grid set xtic rotate by 90 set style data histograms set style fill solid 1.00 border -1 plot "grpdata.txt" using 2:xtic(1) title "apps group numbers"



图 3. grpimage
图 3. grpimage

当然,可以像 sar 示例一样在柱状图中绘制多组数据。现在看看另一个数据源。清单 6 中的数据反映三个月内磁盘阵列中数据的增减。第 1 列是磁盘阵列名称,第 2 列是第一个月的磁盘使用量,第 3 列是下一个月的磁盘使用量,最后一个月的数据在第 4 列中。


清单 6. disk.txt

hdisk2 420 425 410 hdisk3 700 780 760 hdisk4 450 450 452 hdisk5 680 702 690 hdisk6 320 330 329 hdisk7 530 515 514

生成图形的配置文件见 清 单 7。在 plot 命令中,同样使用 xtic 命令修改 x 轴数据的显示方式。在生成柱状图时,第 2、3 和 4 列使用 x 轴作为参照点。因此指定第 2 列使用 x 轴作为参照:

2:xtic(1)

gnuplot 假设要绘制的其他列也参照 x 轴,所以在 plot 命令中不需要再指定 xtic:

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

使用以下命令生成图像:

$ cat diskhist.conf | gnuplot

产生的图像见 图 4


清单 7. diskhist.conf

# diskhist.conf set terminal png truecolor set output "diskimage.png" set grid set style data histograms set style fill solid 1.00 border -1 plot "disk.txt" using 2:xtic(1) title "Oct-09 data growth(gb)", '' using 3 title "N ov-09 data growth(gb)", '' using 4 title "Dec-09 data growth(gb)"



图 4. diskimage
图 4. diskimage

可以使用 gnuplot 从各种数据生成不同的图形。要想使用 shell 脚本自动执行图形生成,我建议使用 'here' 文档方法,可以通过这个过程使用 gnuplot 动态地生成图形。要想禁止 Web 服务器缓存图形,应该在脚本中使用适当的 HTML META 标记(例如 ‘no-cache’ 语句)。

超详细的gnuplot使用教程1.gnuplot参数介绍及演示1.1首先来解释一下会用到的各类参数以及其解释1.2 画图实际测试1.3 其它参数介绍(约定范围、坐标轴设定)1.3.1 约束画图范围1.3.2 关于坐标轴的设定1.3.3 图例1.3.4 在图中任意位置插入文字1.4 同时画出多条曲线1.5 x轴时间设置1.6 在图中添加直线和箭头1.7 读取dat、txt文件进行画图1.8 设定图的... 1 -u参数查看CPU,每间隔5秒采集一次,共采集6次 [admin@v019192.sqa.cm4 ~]$ sar -u 5 6 Linux 2.6.18-164.el5xen (v019192.sqa.cm4) 2012年08月19日 16时24分31秒 CPU %user %nice %system %i gnuplot 是一个用于生成趋势图和其他图形的工具。它通常用于收集基于时间的数据,但是不限于此;也可以使用静态数据。gnuplot 可以以批模式运行或动态运行,结果由图形查看程序或 Web 浏览器显示。本文演示如何使用 gnuplot 和批文件为从 sar 或其他数据源收集的数据生成图形。gnuplot 有许多命令选项,可以通过 set 操作符使用它们。但是,要想... 新建txt,将文件名改成xxx.dem,此时可以用写字板打开,将下述代码输入进去。(这里我把文件保存为2time.dem) 链接:https://pan.baidu.com/s/1J-d4Ou06ObNtrFoOniTIxA 提取码:2jt5(这里面有几个可以画不同图的代码例子,原理一样,这里只对其中一... 到目前为止,我们所有的gnuplot作图都只是输出到电脑屏幕上。如果要在我们的文档里使用这些图片,我们必须把它们以某种文件格式存储下来。前面已经介绍过,gnuplot里面控制图像输出方式的命令是terminal。输出到电脑屏幕:gnuplot> set terminal wxt输出为eps文件。gnuplot> set terminal postscript eps所以首先选择eps,... 输入:nullS.txt 输出 throsld.pdf 第一行为设置终端输出格式为pdf ,并且输出图形比例长:宽=7:6 线宽(line-width)为 3,字体“Times-Roman”,字号为20 第二行设置输出的文件名 第三行设置了x轴名称,{/Symbol b}表示希腊字母beta b是希腊字母的缩写 第四行set xtics 0.4 设置了x轴显示刻度的间隔是0.4 第七行 set key left top 将图例设置在左上... 一. 简介   gnuplot是一个命令行驱动的科学绘图工具,可将数学函数或数值资料以平面图或立体图的形式画在不同种类终端机或绘图输出装置上。gnuplot既支持命令行交互模式,也支持脚本。 二. 特性 三. 安装 1. Win准备的软件:gp466-win64.zip绿色版,直接解压,打开bin/wgnuplot.exe即可。输入quit或q或exit退出. 四. 基础篇 4.1 p... gnuplot,轻量级画图神器。放上维基百科的解释:gnuplot是一套跨平台的数学绘图自由软件。使用交互式接口,可以绘制数学函数图形,也可以从纯文字档读入简单格式的座标资料,绘制统计图表等等。它不是统计软件,也不是数学软件,它纯粹只是一套函数/资料绘图软件。它可以产生PNG,SVG,PS,HPGL,……等等开放的图形档案格式的输出,供文书处理/简报/试算表/……等等软件汇入。 绘画二维或... gnuplot安装(202203) 文章目录gnuplot安装(202203)安装与使用常见错误参考gnuplot-tutorial-part其他阅读安装函数Plot && SplotPlotting FunctionsPlotting Data自定义PLOTplot自定义使用set自定义用其他注释字符绘制数据文件GNUPLOT SCRIPTS 使用ns3时需要用到gnuplot gnuplot aa rm aa 安装与使用 以下操作在su下进行,make install时否则会有权限错误