随笔-49  评论-67  文章-27  trackbacks-0

原文在http://www.combimouse.com/index.htm,是多页面格式,本人进行了整理,方便阅读

1        简介

1.1    介绍 gnuplot

gnuplot 是一个命令导向的交谈式的绘图软件,在 1986 年由 Colin Kelley Thomas Williams 发展而成。 gnuplot 的功能就是把数值数据和数学函数转换成容易观察的平面或立体的图形,帮助研究者找出资料背后所隐藏的意义。因此 gnuplot 并不是一般常见的美工绘图软件,也不是从事数学运算的程序,它最适合的是在科学研究的过程中,代替研究人员完成数据绘制与理论模型比对等机械化的工作,来加速研究的进行。

1.2    科学绘图与 gnuplot

科学研究大致上是有一定程序的,通常是先收集数据,经过一些计算得到较容易了解的数据,再尝试观察出其中的一些法则。而观察大量数据最有效的方法,自然是透过绘图的方式。传统的绘图工具是方格纸、对数纸和直尺、铅笔等,用人工的方式描绘,其过程旷日费时且容易犯错, gnuplot 就是为了解决这个问题而设计出来的自动化绘图工具。它可以让使用者很容易地读入外部的数据文件,立即在屏幕上看到图形,并且选择和修改图形的画法,明显表现出数据的特性。

在初步看过数据的图形表示后,研究者可能由此获得一些启发,例如怀疑数据曲线/曲面可能是某类函数所构成;或者研究者原本就推论其数据应符合某个模型,这时候必须把数据的图形和模型所产生的图形画在一起做比对的工作。 gnuplot 绘制数学函数的功能就在这里派上了用场,配合同时绘制数个曲线/曲面并标色的能力,可以很容易比对不同的数据和模型。在比对曲线时还可以加上误差的范围,立刻看出模型是否真正准确地预测了数据的行为。在这个过程中,研究者不断地修正其模型或数据,用 gnuplot 绘图加以验证,如此重复进行,直到研究告一段落。

到了这个阶段,研究者常会把这些工作的过程和结果记录下来,他可以把 gnuplot 的图形直接在各种打印机上印出来,辑入工作记录之中。如果要将之撰写成论文,可以把图形存成所用的论文排版软件(例如 LaTeX )所能接受的图形格式档案 (例如 Postscript 格式),置入论文之中。也可能他觉得 gnuplot 画的图还不够好,想要自己加以修改例如用箭头和批注强调图中某个特异之处,那么可以把图形存成一些美工软件能够接受档案格式,加以润饰后再放入文件之中。

1.3    关于这本导读

这本导读撰写的目的,是希望让没有用过 gnuplot 的使用者在读过这份简要的导读后,能了解到 gnuplot 在设计与使用上的精神,或者至少可以很快地知道 gnuplot 是不是他工作上所需要的工具。如果您已经懂得 gnuplot 的使用方法,或看过以后决定以 gnuplot 作为您的工作伙伴,也希望您可以从这本导读中获得一些想法上的触发,让您在使用 gnuplot 时更能够得心应手。

在决定这本导读的题材时,曾经有许多的考虑。它的性质有点接近常见的使用文件中的教学指引 (Tutorial Guide) ,但我们不希望像教学指引一样把不同的题材割裂开来,秀几个范例,然后使用者还要自己去拼凑出整体的概念。我们的理想是希望能用一个接近真实情况的完整故事串起所有的题材,换句话说,我们营造一个虚拟的情境,读者在此由实际上的需要推导出工具所应具备的功能。虽然读者不是这个工具的制造者,但工具的观念和动机却是在这个过程中由读者所引发的,也就比较能了解工具和人、工作的互动关系。由这样的观点应该可以保持读者在学习过程中的主动性,不至于迷失在五花八门的功能中,避免读了一大堆招式却不知道如何发挥的空虚感。这也是这本小册子决定以「导读」 (Touring Guide) 为名的原因。

这样的题材无可避免地会有些不尽完备的地方,最大的影响就是不可能涵盖所有的主题,在这本导读中只用了 gnuplot 2D 绘图,如 3D 绘图等功能并未包括在此。但这应该是值得付出的代价,因为使用工具处理事情的目的就是解决问题,原本就不讲究要完全了解工具的每一个部分。如果要对 gnuplot 的功能有全盘的了解,可以另外参考 ASPAC 文件 gnuplot 使用手册。事实上,这本导读有多处必须参考“ gnuplot 使用手册”,我们强烈建议您尽快拿到这本手册参照使用。

这本导读的内容,是以一个假想的科学研究过程中所导引出的绘图方面的种种需要和问题为主线,说明 gnuplot 所能提供的解决方法和功能。

第二章 叙述在探索数值数据意义的过程中,所产生的各种绘图上的不同需求,和 gnuplot 的绘图环境所能提供的各种解决的方法,包括数据的输入、图形的重复调整与比对等。第三章 叙述在研究告一段落后,如何保存和使用 gnuplot 所画的图,包括打印、置入文件、另加修饰等。第四章 把一些和科学绘图没有直接关系但可以明显改善工作环境或流程的主题收集在此,包括在 C 程序中使用 gnuplot 绘图、在不同环境中使用 gnuplot ,在线求助等。

2        gnuplot 检视数值资料

2.1    gnuplot 的输入数据格式

gnuplot 所要读入的数据文件格式的要求很少,最简单的要求是只要在档案中有列 (column) 的结构,可用以分辨不同字段 (field) 就行。以下就是本章的数据范例:假设某次实验后收集得实验资料,是一组可用以绘图验证的数据,这些数据存在一个文件名为 “data” 的档案中,包括有三个字段 —— 依序是 X 值、 Y 值、和误差值。

资料文件 “data”

-4.000000  25.071400 5.535340

-3.416670  26.609600 5.186600

-2.833330  32.507702 4.563950

-2.250000  42.865200 5.719100

-1.666670  68.307297 4.863300

-1.083330 113.533997 4.761980

-0.500000 161.464996 4.625440

 0.083333 181.237000 5.792480

 ...

2.2    启动 gnuplot

启动 gnuplot 相当简单,例如在 UNIX 系统上,只要下 gnuplot 命令,便会出现 gnuplot 的启始画面:

% gnuplot

 

 

 G N U P L O T

 unix version 3.5

 patchlevel 3.50.1.17, 27 Aug 93

 last modified Fri Aug 27 05:21:33 GMT 1993

 

 Copyright(C) 1986 - 1993   Colin Kelley, Thomas Williams

 

 Send comments and requests for help to ...

 Send bugs, suggestions and mods to ...

 

Terminal type set to 'x11'

gnuplot> _

因为是在一部有 X 绘图能力的工作站上执行,所以在这个屏幕画面上显示的终端机形态为 x11 X 终端机)。除此之外,在其它操作系统上,例如 DOS, VAX/VMS 等,也与此情形类似。

若要结束 gnuplot 的工作,可用 quit 命令:

  gnuplot> quit

 

  % _

2.3    读入数据文件绘图

基本上, gnuplot 的绘图命令只有二个—— plot splot ,分别用来绘制二维和三维的图形。我们可以立刻用 plot 命令描出 “data” 文件中的数据点(图 2.1 )。

          gnuplot> plot "data"

资料描点

由于上面命令中并未指定读入数据域位的方法, gnuplot 预设以第一列 (column) 为横轴坐标值,第二列为纵轴坐标值来描点。

科学用程序有时为了方便和易读,而同时将多行数据存在同一个档案中,并加上批注让其它人能知道这些数据的意义, gnuplot 会自动跳过以 # 开头的每一行批注,并且可以用类似 C 语言中 scanf() 函数所用的格式字符串 (format string) 来分辨一行中的不同字段,和自行指定横轴、纵轴、误差范围等数据所用的字段。

2.4    调整绘图的格式

plot 预设只作描点的工作,但描点可能不足以让人看出数据的意义。用下面的命令可以改变 plot 命令的绘图参数,把图上各点连接起来,观察整个曲线的行为(如下图)。

  gnuplot> plot "data" with linespoints

				
						
								 
						
				
		
				
						资料折线图
				
		

由此图可以明显看出,数据中有一个尖峰 (peak) ,但在它的右侧还有一个较不明显的凸起。

针对不同意义的数据, gnuplot 提供了 9 种不同的图样 (styles) 供使用者选择,包括描点、联机、长条图、阶梯图、误差图等。

2.5    Gnuplot 之助进行工作

在看过前面的内容后可以知道 —— gnuplot 就是一个图形预视工具,很容易输入数据和修饰图形。您可以把工作中有关数据绘图的部分交给它完成,再视结果决定下一步工作的进行。例如在科学研究过程中, gnuplot 所能扮演的角色不只是单纯把数值数据绘成图形,它还可以同时画出其它数据或函数图形与之比对。我们延续前面的范例,假设范例中的数据曲线应该由二个高斯函数和一个常数所组成,

所算出最接近实验数据的模型函数是:

再用 gnuplot 同时把模型函数 输入并画图观察,为了解模型函数是否准确预测了实验结果,可用误差图的方式画出实验数据加以比对(如下图)。

				
						
								  gnuplot> G1(x)=135.64*exp(-0.5*x**2)
				
		
				
						
								  gnuplot> G2(x)=57.5824*exp(-0.05556*(x-3)**2)
				
		
				
						
								  gnuplot> G(x)=G1(x)+G2(x)+13.38
				
		
				
						
								  gnuplot> plot "data" using 1:2:3 with errorbars, \
				
		
				
						
								  "data" with lines, G(x), G1(x), G2(x)
				
		

数据、模型比对图

可以发现模型曲线在图形的中央部分虽然足够准确,但在两侧部分却出现明显的误差,这表示模型很可能需要修正,才能正确预测实际的状况。假设新的模型是用一个一次项来修正旧的,

重新计算后,得到新的逼近函数:

并仿照前面的方式重新绘图比对,得到新的模型和数据比对图(如下图)。


数据和新模型比对图

于是发现新的模型可以完全吻合所有的实验数据,等于替这个修正的模型提出了有力的证据。在研究告一段落后,必须着手整理出研究报告或写成论文, gnuplot 在前面所画的图除了帮助研究的进行,还能以高质量输出,很方便地辑入文件之中。 下一章 将专门讨论这个主题。

3        输出图形辑入文件

3.1    印出 gnuplot 绘制的图形

gnuplot 可以把图形输出到各种打印机、绘图机,包括 Epson, NEC, HP 等打印机和 Tektronix 绘图机等输出装置,或是任何 Postscript 打印机,作为简单的工作记录,或用作和他人讨论的材料。方法是

  1. 设定输出格式;
  2. 设定输出档案;
  3. 重绘图形至档案;
  4. 由操作系统将档案印出。

其中输出格式因打印机而有所不同,打印的命令也随操作系统而有差异,下面以 UNIX DOS 二操作系统为例说明。

3.2    UNIX 上打印图形

UNIX 操作系统上,假设要将 gnuplot 的图在一台名为 sparc Postscript 打印机上印出,可用下面的命令达成:

gnuplot> plot sin(x)

gnuplot> set terminal postscript

  Terminal type set to 'postscript'

  Options are  'landscape  . . . .

gnuplot> set output 'sin.ps'

gnuplot> replot

gnuplot> quit

 

% lp -d sparc sin.ps

因为 UNIX 操作系统提供有 pipe 功能,故可将输出直接传给 lp 命令印在指定的打印机只要将 output 参数改变如下即可:

  gnuplot> set output '|lp -d sparc'

那么下过 replot 命令后就会直接印出图形。

3.3    DOS 上打印图形

DOS 操作系统上执行 gnuplot ,无法如同在 UNIX 上一样直接印出,必须先把图形存成档案再行打印,例如要在 Epson 打印机印出 DOS 上的 gnuplot 图形:

  gnuplot> plot sin(x)

  gnuplot> set terminal epson_180dpi

    Terminal type set to 'epson_180dpi'

  gnuplot> set output 'sin.ep'

  gnuplot> replot

  gnuplot> quit

 

  C:gnuplot> copy sin.ep /b lpt1:

读者可以发现这里不同于前一小节之处,只有终端机格式设定和操作系统打印命令而已。

3.4    在文件中置入 gnuplot 绘制的图形

在论文或报告等较正式的文件中,不能像前一节那样,把图印在一张纸上夹入文件就好,而必须把图形和文字合并成一份整体的文件。如今已经有许多文书排版软件可以完成图文整合的工作,例如写作科学论文常用的 LaTeX 。虽然这些软件所能接受的图形档案格式并不统一, gnuplot 还是能将所画的图存成许多种常见的档案格式,例如 Postscript, LaTeX picture, pbm [1] ,直接置入排版软件的文件之中。以您眼前这本导读为例, 2.1 是由 gnuplot 画出,存在 “PlotDots.ps” 档案中,格式为 post-script ,存盘方法和 3.1.1 节一样。在本文的 LaTeX 源文件中,是用 psfig 命令置入此图形文件:

  \documentstyle[psfig]{article}

  ...

  \begin{figure}[h]

  \psfig{figure=PlotDots.ps,width=4in,height=2.5in,angle=-90}

  \caption{Plotting Points}

  \end{figure}

  ...

有关 UNIX 操作系统上的图文整合方面,请参考 ASPAC 文件“X 环境下图文整合”[2]

3.5    依自己的需要修饰 gnuplot 绘制的图形

gnuplot 可以在图中加上一些说明文字,使图形的意义更加清楚,例如坐标轴的名称、刻度以及图的标题等 [3] 。但在作为插图之用时,有时还必须对图形再作修改,例如强调图中某个部分并加以说明,针对这方面的需要, gnuplot 能把图形存成其它美工软件可以接受的格式,修改完成后再置入文件中。下面以 2.3 的数据 - 模型比对图为例,先产生 tgif 格式图形文件,经过 UNIX 上的 tgif 软件 [4] 修改后,转存为 Postscript 档,再仿造前一节的方法置入文件中:

  gnuplot> plot "data"

  gnuplot> set terminal tgif

    Terminal type set to 'tgif'

  gnuplot> set output "model2.obj"

  gnuplot> replot

tgif 修改过的数据和新模型比对图

除了 tgif 软件外,许多其它的绘图工具也可以对输出图形加工, gnuplot 支持多种图形文件格式 [5] ,只要所用的绘图工具能接受其中一种格式就可以,例如 fig(xfig), gpic(groff) 等,修饰完成后再选择适当格式输出。除了置入文件外,也可用来印制投影片或做其它用途。

4        其它

4.1    在程序中呼叫 gnuplot 负责绘图

如果使用 UNIX 操作系统, gnuplot 也可以在程序中直接担任画图的工作,虽然 gnuplot 通常是以交互方式来使用,但只要先决定好绘图参数,也可以在程序中透过程序间通讯 (IPC, Inter- Process Communication) 将绘图数据和绘图命令传给 gnuplot ,在程序执行时就画出图形 [6]

在这种情况下使用 gnuplot 画图,其意义不同于 2 的使用方式。第 2 章的情况是已经有处理完毕的资料要分析,但不清楚要用何种方式绘图观察,所以一边画图,一边根据图形调整数据的表现方式,直到找出数据的意义。在程序中呼叫 gnuplot 时,必须已经清楚数据表现的方式, gnuplot 只是单纯地将数值数据转成指定的图形,也可能设计成不必等到程序结束才绘图,而是计算到一定阶段就画图检查结果。这样设计的意义和自行撰写程序来绘图是一样的,但可减少自行撰写时间和精力的浪费。

4.2    在各种环境下使用 gnuplot

虽然前面所讨论的材料基本上以 UNIX 工作站环境为主, gnuplot 在很多常见的计算机上也可以执行,它也支持一些常见的图形终端机标准,使用者可以针对不同的工作环境,调整使用 gnuplot 的方式。

4.2.1    在不同终端机上绘图

  • X 终端机
    在本文 2.2 的范例中,因为所用终端机具有 X 窗口绘图能力, gnuplot 会在启动时自动将输出格式设为 x11 X 窗口可显示最佳的图形质量,但需要快速的网络传输,所以通常必须在办公室、实验室等有局域网络的地方才能流畅地使用。大部分工作站等级以上的计算机和专用的 X 终端机都可使用 X 窗口绘图。
  • 仿真 Tektronix 终端机
    但如果你的计算机不在局域网络上,例如在家中只能透过调制解调器 (modem) 联机至办公室的工作站,为了看到 gnuplot 的绘图,就必须使用能仿真图形终端机的拨接 (dial-up) 软件,例如 MS-DOS Kermit [7] 可仿真成 Tektronix 绘图终端机,只要在 gnuplot 中用下面命令设定 terminal 参数就可以在家中看到图形:

    gnuplot> set terminal 'kc_tek40xx'

其中的 `c' 是彩色 (color) 的意思。 当然您也不一定要用 MS-DOS Kermit 才能看到图形,其它可以仿真 Tektronix 绘图的通讯软件通常也行,例如 NCSA Telnet 但所用的 terminal 设定会有些不同,这些设定可以参考 ASPAC 文件 “gnuplot 使用手册 6.2.1

4.2.2    在各种计算机上执行 gnuplot

gnuplot 在目前许多常见的计算机上都可执行,除了使用 UNIX 操作系统的计算机外,也可以在 VAX/VMS, MS-DOS , OS/2, MS-Windows [8] , Macintosh [9] 等计算机操作系统使用。

4.3    储存和加载你的工作

gnuplot 可以让您把一些命令存在档案中,再整批加载 gnuplot 执行,就如同您一一键入这个档案中的每一行到 gnuplot 。例如载入一个档案 "script.gp" ,可用 load 命令达成:

    gnuplot> load "script.gp"

 

    gnuplot> save "script.gp"

4.4    寻求信息和帮助

4.4.1    在线求助

gnuplot 提供方便的在线求助 (On-line Help) 功能,让使用者在有困难时可以立刻查阅,它的在线求助是一个树状的结构,用 help 命令来找出所要的使用说明。例如仅键入 help 可以列出所有的项目:

gnuplot> help

 GNUPLOT is a command-driven interactive function plotting

 program.

 For help on any topic, type `help` followed by the name

 of the topic.

 The new GNUPLOT user should begin by reading the `introduction`

 topic (type `help introduction`) and about the `plot` command

 (type `help plot`).  Additional help can be obtained from the

 USENET newsgroup comp.graphics.gnuplot.

 

Help topics available:

      autoscale      binary-data    bugs           cd

      clear          comments       copyright      environment

      exit           expressions    help           introduction

      line-editing   load           pause          plot

      print          pwd            quit           replot

      reread         save           set            shell

      show           splot          startup        substitution

      userdefined

 

Help topic: _

如果在 Help topic: 之后键入 plot ,就可以看到有关 plot 命令的说明, plot 的说明末尾还有列出更细的说明项目:

. . . . .

Subtopics available for plot:

      data-file      datafile       errorbars      parametric

      ranges         style          title          with

 

Subtopic of plot:

Subtopic of plot: 之后可再键入项目继续查询。

4.4.2    gnuplot 的其它文件

下面是一些很有用的 gnuplot 文件:

l         Gnuplot Reference Manual
标准的 gnuplot 参考手册,附在 gnuplot 原始程序里,里面详细描述了所有命令用法,适合在使用时随时查阅参考。

l         Gnuplot User Guide
一本简短扼要的使用手册(约 17 页),介绍 gnuplot 中最常用的功能,附以简单的范例说明,对于没有英文阅读上问题者,此书也是一本颇不错的入们书籍。您可在 ftp://picard.tamu.edu/pub/gnuplot 中找到它的 LaTeX 源文件。

l         Gnuplot Demo
这是一个附在 gnuplot 原始程序里的范例集,展示了 gnuplot 的大部分功能。它并不是一份文件,而是一组放在原始程序目录下的 "demo" 目录内的 gnuplot 批次档,让使用者可以自行加载实验 gnuplot 的各项功能。如果不想自己动手,在 http://www.cs.dartmouth.edu/gnuplot/gnuplot_demo.html 可以看到图文并陈的原始命令和执行结果。

l         Gnuplot FAQ
一般常见的 gnuplot 问题集,内容多来自 Usenet 上的讨论,并定期在其上更新,除此之外,也可以透过 Anonymous FTP ftp://rtfm.mit.edu/pub/usenet/news.answers/graphics/gnuplot-faq WWW http://www.uni-karlsruhe.de/~ig25/gnuplot-faq.html 等不同方式获得。

4.4.3    Internet 上的 gnuplot 资源

l         Usenet
Usenet 上有一个专门讨论 gnuplot 的讨论区 (newsgroup) comp.graphics.gnuplot ,前面提到的 Gnuplot FAQ 就是收集这里的讨论,并且定期在此公布更新的版本。

l         WWW Info Service
这是 gnuplot WWW home page

http://www.cs.dartmouth.edu/gnuplot_info.html
前面所提到的文件多可以在这里找到,而且多已做成 html 格式,使查询更加快速方便。



[1] 关于 gnuplot 所能输出的图形档案格式,请参考 ASPAC 文件 “gnuplot 使用手册” 6.2

[2] 此文件的 Postscript 版可在 ftp://phi.sinica.edu.tw/pub/aspac/doc/94/94001.ps 找到。

[4] 有关 tgif 的使用,请参考 ASPAC 文件 “X 环境下图文整合” 4.4.2

[6] 详细的方法请参考 ASPAC 文件 “gnuplot 使用手册的附录 B

[7] 有关 MS-DOS Kermit 仿真 Tektronix 绘图终端机的使用,请参考 ASPAC 文件 ftp://phi.sinica.edu.tw/pub/aspac/doc/94/94008.ps 找到。

[8] 获得这些操作系统上的 gnuplot 可执行档的方法,请参考 ASPAC 文件 “gnuplot 使用手册” 2.1

[9] Macintosh 版的 gnuplot 可执行档可以在 ftp://imaux.mgt.ncu.edu.tw/pub/mac/umich/graphics/graphicsutil/gnuplot3.5.cpt.hqx 得到。

posted on 2006-06-13 17:41 思考 阅读(4800) 评论(0)  编辑  收藏 所属分类: 网络仿真

只有注册用户登录后才能发表评论。


网站导航: