Top: Table of contents
Next: Chapter 7. Miscellaneous commands
Previous: Chapter 5. Plotting

Chapter 6. Input, Output

GNUPLOT 描绘数学函数或数值资料图形,所以 GNUPLOT 除接受绘图、定义常数函数 等命令外,尚要能读入数值资料。数值资料通常由程式产生,如表 4。 GNUPLOT 须用指令 plot 或 splot 由档案内读入数值资料。在输出方面 GNUPLOT 除在终端机上显示绘图结果外,尚可输出至许多种输出装置上。在此介绍 GNUPLOT 读入、写出方面的指令。



6.1 Input

在 GNUPLOT 中输入命令的方式有两种:

  1. 执行 gnuplot 后,在 gnuplot> 提示符号下逐行输入命令或是执行 load "work.gnu" 命令。此时,GNUPLOT 执行档案 work.gnu 中的命令。
  2. 在系统提示符号下执行
    % gnuplot work.gnu 
    GNUPLOT 执行 work.gnu 档案内的命令。

GNUPLOT 不论绘数学函数或数值资料皆使用 plot(splot) 指令,此指令在第 5 章 有详细的介绍。在此介绍 GNUPLOT 读入的数值资料格式及 "load" 与 "reread" --- 可读入含有 GNUPLOT 命令的档案。



6.1.1 Read data from file

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 2
An example of datafile.(III)
输入
plot "data.gnuplot"  # 画出 2D 的图形
plot "data.gnuplot" using 1:3:4 with errorbars   # 画出 2D errorbar 图形


6.1.2 Read commands from file

当使用 GNUPLOT 进行繁杂的绘图工作时,需要许多命令来完成工作。这些命令可储存在档案内,再经由 "load" 指令将命令由档案内读出及执行。这些包含常数、函数的定义及绘图环境的设定。load 可读由 save 命令所储存的档案。load 语法为:
    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 指令的另一项应用。



6.1.3 Command : reread

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 才结束。



6.2 Output

在此可分为写出数据资料与写出键入的 GNUPLOT 命令、函数、常数... 等两部分



6.2.1 Write results to output device

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 节)以下介绍几种典型的应用:



6.2.2 Output format : postscript

介绍产生以 PostScript 语言描述的图形。语法如下:

   set terminal postscript {<mode>} {<color>} {<dashed>}
                           {"<fontname>"} {<fontsize>}

其中 <mode> 可为 landscape, portrait, epsdefault。若选择 default 则一切为预设值 --- landscape, monochrome, dashed, 14点 "Helvetica" 的字形。 预设为 10 寸宽 7 寸高的纸张。<color> 可为 colormonochrome 设定输出为彩色或是单色。<dashed> 可为 soliddashed。''<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

恢复成将结果画在终端机上的状态。



6.2.3 Output format : table

以数值精确描述取样后图形的各点座标值。举例如下:

    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) 取样后的座标值。



6.2.4 Saving commands

当我们在 GNUPLOT 中辛苦地逐行键入命令,且经一番细心的修改而得到希望 的结果时。我们期望能重复使用这组命令或留待下回参考。在 GNUPLOT 中提供 SAVE 命令,它以文字方式储存使用者定义的函数、常数、绘图参数或最后一个 plot (splot) 命令于档案中。其语法如下:

    save  {<option>} "<filename>"

此处 <option> 是设定储存的项目,其项目可为 functions, variablesset。若不设定 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 环境下执行的原始状态。



Top: Table of contents Next: Chapter 7. Miscellaneous commands