GNUPLOT 描绘数学函数或数值资料图形,所以 GNUPLOT 除接受绘图、定义常数函数 等命令外,尚要能读入数值资料。数值资料通常由程式产生,如表 4。 GNUPLOT 须用指令 plot 或 splot 由档案内读入数值资料。在输出方面 GNUPLOT 除在终端机上显示绘图结果外,尚可输出至许多种输出装置上。在此介绍 GNUPLOT 读入、写出方面的指令。
在 GNUPLOT 中输入命令的方式有两种:
load "work.gnu"
命令。此时,GNUPLOT 执行档案
work.gnu
中的命令。
% gnuplot work.gnuGNUPLOT 执行 work.gnu 档案内的命令。
GNUPLOT 不论绘数学函数或数值资料皆使用 plot(splot) 指令,此指令在第 5 章 有详细的介绍。在此介绍 GNUPLOT 读入的数值资料格式及 "load" 与 "reread" --- 可读入含有 GNUPLOT 命令的档案。
GNUPLOT 使用 plot(2D) 或 splot(3D) 指令读入数值资料档及绘出图形,
详细的描述见 5.3 节。数值资料的格式为每行一组资料,
若该行开头为 # 表示该行为注解;若开头为空白,则忽略这些空白。
一组资料中的数字以空格或 tab 分开,数字以整数、浮点数字或科学记号来表示。
下表即是数值资料档 "data.gnuplot" 的范例。
# data.gnuplot 0 2 3 1 1 4 2 3 3 10 8 4 4 8 12 1 10 2 3 2An example of datafile.(III)
plot "data.gnuplot" # 画出 2D 的图形 plot "data.gnuplot" using 1:3:4 with errorbars # 画出 2D errorbar 图形
load "<input-file>" # 使用 "(双引号) 或 '(单引号) 皆可例子如下:
load "work.gnu" # 读入 work.gnu 档案中的指令。work.gnu 档案内容为
damp(t) = exp(-s*wn*t)/sqrt(1.0-s*s) per(t) = sin(wn*sqrt(1.0-s**2)*t - atan(-sqrt(1.0-s**2)/s)) c(t) = 1-damp(t)*per(t) wn = 1.0 set xrange [0:13] set samples 50 set dummy t plot s=.1,c(t),s=.3,c(t),s=.5,c(t),s=.7,c(t) replot s=.9,c(t),s=1.0,c(t),s=1.5,c(t),s=2.0,c(t)
在 GNUPLOT 中执行 load "work.gnu"
之后,绘出图15 的结果。
使用 load 指令执行 gnuplot 指令可不用每次皆逐一设定绘图环境与函数常数设定等,
亦可将此次结果储存起来留待下次使用。
图 15: Demonstration of read commands from file
通常 GNUPLOT 完成一件绘图工作的过程中,须设定许多绘图环境。
若紧接著画另一张图时,往往需调整许多绘图环境参数。此时可读一 GNUPLOT
原始设定的档案,使 GNUPLOT 的设定恢复成起始状态,就可不必逐一调整绘图环境。
例如将 GNUPLOT 的起始状态存于 environment.gnu
档案中,只要执行 load "environment.gnu"
,即刻恢复 GNUPLOT
的绘图环境成初始状态。这是 load 指令的另一项应用。
GNUPLOT 提供 reread 指令,用来重复执行档案中的指令。例如动态展示图形或 周期性改变部份常数而观察函数的变化情形。以动态展示图形为例,如图16, reread 指令使 GNUPLOT 反覆地执行一组指令改变 3D 图形的视角 (view point) 达到旋转图形的视觉效果。如此周而复始地重复执行命令 --- 达到连续输出的执 行结果。下述指令:
set parametric set hidden3d set nokey set xrange [0:8] set yrange [-4:4] set zrange [-2:2] set data style line set title "Demo of animation capability - Digitized Blue Whale" xrot=60 zrot=0 splot "whale.dat" # 蓝鲸的图形资料档 load "gnuplot.rot" # 读入 rotate 指令
图 16: Demo of animation capability - Digitized Blue Whale
绘出如图16 而不断旋转的蓝鲸。其 gnuplot.rot 档案中命令为不断改变 3D 图形的视角;其执行改变视角、重绘图形后,因 reread 命令而重新执行 gnuplot.rot 档案中命令。因而得到不断移动的蓝鲸。gnuplot.rot 档案内容为
zrot=(zrot+10)%360 xrot=(xrot+17)%180 set view xrot,zrot pause 3 # wait three seconds replot reread
此档案内命令将 X 轴旋转 17 度、Z 轴旋转 10 度后,再重绘一次蓝鲸。 reread 是重复执行本档案命令。如此重复执行,直至按 Ctrl-c 才结束。
在此可分为写出数据资料与写出键入的 GNUPLOT 命令、函数、常数... 等两部分
GNUPLOT 提供许多种装置的输出语言,使得 GNUPLOT 的结果可输出至不同的 输出装置。此为 GNUPLOT 的特色。这许多种输出装置约略可分为以下三类 (见表7、表8、表9):
name description dumb printer or glass dumb terminal aed512 AED 512 Terminal aed767 AED 767 Terminal bitgraph BBN Bitgraph Terminal kc_tek40xx MS-DOS Kermit Tek4010 terminal emulator - color km_tek40xx MS-DOS Kermit Tek4010 terminal emulator - monochrome tek410x Tektronix 4106, 4107, 4109 and 420X terminals tek40xx Tektronix 4010 and others; most TEK emulators vttek VT-like tek40xx terminal emulator x11 X11 Window System X11 X11 Window System (identical to x11) xlib X11 Window System (gnulib_x11 dump)表7: Output device : terminals
name description hline dxy800a Roland DXY800A plotter epson_180dpi Epson LQ-style 180-dot per inch (24 pin) printers epson_60dpi Epson-style 60-dot per inch printers epson_lx800 Epson LX-800, Star NL-10, NX-1000, PROPRINTER ... excl Talaris EXCL Laser printer (also Talaris 1590 and others) hp2623A HP2623A and maybe others hp2648 HP2648 and HP2647 hp7580B HP7580, and probably other HPs (4 pens) hp500c HP DeskJet 500c, [75 100 150 300] [rle tiff] hpgl HP7475 and (hopefully) lots of others (6 pens) hpljii HP Laserjet series II, [75 100 150 300] hpdj HP DeskJet 500, [75 100 150 300] hppj HP PaintJet and HP3630 [FNT5X9 FNT9X17 FNT13X25] imagen Imagen laser printer nec_cp6 NEC printer CP6, Epson LQ-800 [monocrome color draft] okidata OKIDATA 320/321 Standard pcl5 HP LaserJet III [mode] [font] [point] postscript PostScript graphics language [mode "fontname" font_size] prescribe Prescribe - for the Kyocera Laser Printer kyo Kyocera Laser Printer with Courier font qms QMS/QUIC Laser printer (also Talaris 1200 and others) starc Star Color Printer tandy_60dpi Tandy DMP-130 series 60-dot per inch graphics vx384 Vectrix 384 and Tandy color printer表8:Output device : printers or plotters
name description hline aifm Adobe Illustrator 3.0 Format corel EPS format for CorelDRAW dxf dxf-file for AutoCad (default size 120x80) eepic EEPIC -- extended LaTeX picture environment emtex LaTeX picture environment with emTeX specials gpic GPIC -- Produce graphs in groff using the gpic preprocessor latex LaTeX picture environment mf Metafont plotting standard mif Frame maker MIF 3.00 format pbm Portable bitmap [small medium large] [monochrome gray color] pslatex LaTeX picture environment with PostScript (specials) pstricks LaTeX picture environment with PSTricks macros regis REGIS graphics language rgip RGIP metafile (Uniplex). Option: fontsize (1-8) uniplex RGIP metafile (Uniplex). Option: fontsize (1-8) table Dump ASCII table of X Y [Z] values to output texdraw LaTeX texdraw environment tgif TGIF X-Window draw tool (file version 10) tpic TPIC -- LaTeX picture environment with tpic (specials)表9:Output : other descriptive languages
GNUPLOT 使用参数 terminal 设定输出装置形态,可设成任一种输出装置; 使用参数 output 设定输出的目的地,可送至标准输出(standard output)、 或档案或另一程式的输入。(关于指令的描述,请参考 4.6 节)以下介绍几种典型的应用:
介绍产生以 PostScript 语言描述的图形。语法如下:
set terminal postscript {<mode>} {<color>} {<dashed>} {"<fontname>"} {<fontsize>}
其中 <mode> 可为 landscape, portrait, eps 或 default。若选择 default 则一切为预设值 --- landscape, monochrome, dashed, 14点 "Helvetica" 的字形。 预设为 10 寸宽 7 寸高的纸张。<color> 可为 color 或 monochrome 设定输出为彩色或是单色。<dashed> 可为 solid 或 dashed。''<fontname>'' 为 PostScript 认识的字形名称。<fontsize> 为字形尺寸。
下面举一些例子:
set terminal postscript # 设定输出为 PostScript # 设定为纸直放,彩色输出,14 点 Times-Roman 字形。 set terminal postscript portrait color "Times-Roman" 14
此时搭配
set output "result.ps" plot sin(x)
命令,即将数学三角函数 sin(x) 以 PostScript 语言储存于 "result.ps" 档案中。若执行
set output set terminal x11
恢复成将结果画在终端机上的状态。
以数值精确描述取样后图形的各点座标值。举例如下:
set terminal table set output "datafile" plot sin(x)
档案 datafile 内容为
Curve 0, 100 points i x=-10 y=0.544021 i x=-9.79798 y=0.364599 i x=-9.59596 y=0.170347 i x=-9.39394 y=-0.0308337 . . .
其每一行为描述数学三角函数 sin(x) 取样后的座标值。
当我们在 GNUPLOT 中辛苦地逐行键入命令,且经一番细心的修改而得到希望 的结果时。我们期望能重复使用这组命令或留待下回参考。在 GNUPLOT 中提供 SAVE 命令,它以文字方式储存使用者定义的函数、常数、绘图参数或最后一个 plot (splot) 命令于档案中。其语法如下:
save {<option>} "<filename>"
此处 <option> 是设定储存的项目,其项目可为 functions, variables 或 set。若不设定 option 则 GNUPLOT 储存函数、 常数、绘图参数及最后一个 plot (splot) 命令于档案中。下面是一些例子:
save "gnuplot.ini" # 储存所有的命令、函数、常数、options 等。 save functions 'func.dat' # 储存所有的函数。 save var 'var.dat' # 储存所有的常数。 save set "options.dat" # 储存所有的绘图参数。
我们可用 save 储存所键入的命令,待下回使用或储存函数、常数、options 做为检查使用。如附录 A 中即是执行 GNUPLOT 后,立即储存所有的设定,而得到 GNUPLOT 在 X Window System 环境下执行的原始状态。