[gnuplot]
A. 简介
gnuplot 是一个命令导向的交谈式绘图程序(command-driven interactive function plotting program)。使用者输入的每一项命令,可以逐步设定或
修改绘图环境。它以图形表达数据或涵数,使我们可以藉由图形做更进一步的分析。
B. 如何使用gnuplot ($为cygwin shell的提示符号)
a. $ startxwin.bat
b. 在新开出来的窗口输入gnuplot $gnuplot
c. 执行 GNUPLOT 程序时,GNUPLOT 首先检查是否设定环境参数 DISPLAY, 若有则依其设定。当其确定为 X 环境时,将输出模式设定为 X11。笔者以cbr_delay为例,先简单示范如何把图给画出来。画图的指令是plot,要画的档案cbr_delay。
gnuplot> plot “cbr_delay”
图是画出来了,但是笔者要的不是把数据用打点的方式画出来,而是要把这些点连起来。没关系,接下来,只要学着修改环境变量,就可以画出理想的图了。
C. 修改环境变量
a.坐标轴(Axis):绘图参数在设定坐标轴方面的参数可分为变量名称、标点、网格、显示范围、 坐标轴显示方式与显示与否等六方面的设定。不过笔者只介绍几个常用的设定,详细的设定可以参考http://phi.sinica.edu.tw/aspac/reports/94/94002/。
功能
绘图参数名称
标点设定 xtics,ydtics
网格设定 grid
坐标显示方式 logscale
显示范围设定 autoscale,xrange,yrange
坐标轴显示与否 xzeroaxis,yzeroaxis
说明:
1. xtics是对 X 坐标轴上的标点做设定。如起始点、结束点、间隔或在轴上特定点放特定的名称。其语法为:
set xtics { {, {, }} | {({""} {, {""} }...)} }
unset xtics # 不标示任何 X 轴上的标点。
show xtics # 显示 X 轴标点的状况。
例: (原本) gnuplot > plot sin(x)
在x轴上的标点设定是以5为单位。若是觉得想要把标点距离设小一点,例如设为1,可以使用
gnuplot > set xtics -10, 1, 10
gnuplot > plot sin(x)
ytics与 xtics相似,不同点是作用在y轴上。
2. 网格设定 : 在 XY 坐标平面上依刻度画上方格子。
gnuplot> set grid
gnuplot> plot sin(x)
若是想要把网格拿掉,只要在下unset grid即可。
3. 坐标显示方式 : 分为线性与对数两种。 一般为前者,若要改为对数方式,其语法为:
set logscale
其中 axes 为 X 轴、Y 轴、Z 轴的任意组合。base 预设为 10。
4. 显示范围设定:改变各轴的显示范围。autoscale 参数设定后 gnuplot自动调整显示范围。而xrange、yrange则是可以由使用者设定该轴的范围。以 xrange 为例,其语法为:
set xrange [{ : }]
其中参数 与 代表 X 轴的起点与终点,可以是数字或数学式子。
例:
gnuplot> set xrange [0:10]
gnuplot> plot sin(x)
5. 坐标轴显示与否设定 : 设定是否要画出坐标轴,以 X 轴为例:
set xzeroaxis # 设定显示 X 坐标轴
unset xzeroaxis # 设定不显示 X 坐标轴
show xzeroaxis # 检查 X 坐标轴显示与否
gnuplot> set xzeroaxis
gnuplot> plot sin(x)
若是要把xzeroaxis拿掉,只要下unset xzeroaxis即可。
b.标示(Label):GNUPLOT 除了绘出图形外,尚可加入批注做为辅助说明。这批注包括文字与线条两方面,其提供的设定有
功能
绘图参数名称
线条 arrow
文字批注 key,label,title,xlabel,ylabel
说明:
1. 线条:在图上画一线段 可以选择有无箭头。其语法为
set arrow {} {from ,{,}} {to ,{,}} {{no}head}
unset arrow {} # 删除一线条
show arrow # 显示线条使用情况
其中参数 <tag>是给该条线条一个整数名称,若不设定则为最小可用整数。此线条由坐标(sx, sy, sz)到(ex, ey, ez)(在2D中为 (sx, sy)到(ex, ey))。参数 nohead 为画没有箭头的线段,参数 head 或没有 nohead 为画有箭头的线段。
#画一带有箭头的线条由原点到 (1,2)。
gnuplot> set arrow to 1,2
#画一名为3的带箭头线条由(0.4, 0.3 ) 到 (0.2, 0.1)。
gnuplot> set arrow 3 from 0.4, 0.3 to 0.2, 0.1
#删除名为3的线条。
gnuplot>unset arrow 3
#删除所有线条。
guplot> unset arrow
2.文字批注:分为设定标头(title)和标示(label)。
标头(title):设定为在图的正上方加上说明本图的文字。其语法为:
set title {""} {}{,}
show title
其中设定参数 或 为微调标头放置的地址。 xlabel, ylabel的语法与title相同,其各自描述一坐标轴。
标示 (label):为在图上任一位置加上文字说明,一般与线条一并使用。
set label {} {""} {at ,{,}}{}
unset label {} # 删除一标示
show label # 显示标示使用情况
其中参数<tag>与"线条" (arrow) 中<tag>意义相同,用以区别不同的 label。参数 是调整文字放置的位置,可以是 left,right 或 center。
# 将 y=x 放在坐标 (1,2) 之处。
gnuplot> set label “y=x”at 1,2
# 将 y=x^2 放在坐标 (2,3) 之处,并命名为 3。
gnuplot> set label 3 "y=x^2" at 2,3 right
# 将名为 3 的标示居中放置。
gnuplot> set label 3 center
# 删除名为3的标示。
gnuplot> unset label 3
# 删除所有标示。
gnuplot> unsel label
一般绘一图形后,gnuplot会将函数名称或图形文件名称置于右上角。 key参数设定可改变名称放置位置。其语法为:
set key
set key ,{,} #其中参数 , , 设定名称放置位置。
unset key #不显示名称
show key #再度显示名称
[例]
gnuplot> set title “cbr_delay”
gnuplot> set xlabel “simulation time”
gnuplot> set ylabel “delay time”
gnuplot> unset key
gnuplot> set label “constant delay= 0.038706 sec”at 0.1, 0.05
gnuplot> set arrow from 0.5, 0.05 to 0.5, 0.04
c.图样(Style):gnuplot描绘数据资料图形是以读入档案中的坐标值后,以图样绘上。而描绘函数图形是计算若干点的函数值后,以某种图样将函数值绘上。一般是取样 100 点及采取线条作为图样。GNUPLOT 可提供 9 种图样,分别是
1. lines : 将相邻的点以线条连接。如
plot sin(x) with lines
2. points : 将每一点以一符号绘上。如
plot sin(x) with points
3. linespoints : 同时具有 lines 及 points 的功能。如
plot sin(x) with linespoints
4. impulses: 将每一点画一垂直线至 X 轴。如
plot sin(x) with impulses
5. dots: 将每一点绘一细点。如 plot sin(x) with dots。
6. steps : 以垂直线及水平线各一条来连接两点,形成梯形。如连接 (x1,y1),(x2,y2)两点,以(x1,y1)到(x2,y1)和(x2,y1)到(x2,y2) 两线段连接。如 plot sin(x) with steps。
7. errorbars : 对每一点坐标值 (x,y),画一由 (x,ylow) 至 (x,yhigh) 的线段。并在线段两端做上 tic mark。如
plot sin(x) with errorbars
8. boxes : The boxes style draws a box centred about the given x coordinate from the yaxis to the given y coordinate.如
plot sin(x) with boxes
9. boxerrorbars : 组合 errorbars 与 boxes 两者功能。如
plot sin(x) with boxerrorbars
[例] 把cbr_delay中的数据用lines和points连起来。
gnuplot> plot “cbr_delay” with linespoints
linetype 1: 红色 2:绿色 3:蓝色 4:粉红 5:淡蓝 6:棕色 7:米蓝 8:橙色 (都是实线)
pointtype :1:横线一点 2:横线一叉,3 :横线星子号 4:横线一方块(空心) 5:横线一方块(实心) 6:横线一圆圈(空心) 7:横线一圆圈(实心)8:横线一三角(空心头向上) 9:横线一三角(实心头向上) 10: 横线一三角 (空心头向下) 11: 横线一三角(实心头向下) 12:横线一菱形(空心) 12:横线一菱形(实心)
d.输出(Output):GNUPLOT 的输出参数设定有
terminal, output。不过在这里笔者只介绍如何把画出来的图存成
Gif格式。
#把输出设成存成gif格式,内定为X11 terminal
gnuplot> set terminal gif
#把输出的档名设为 cbr_delay.gif
gnuplot> set output “cbr_delay.gif”
#把资料重新绘一次
gnuplot> replot
然后就会产生一个 cbr_delay.gif 的图档了
例子
多张图片画在一张图片上:
>plot "p1" with lines, "p2" with lines
用不同的方式显示图片:
>plot "p1" with linespoints pointtype 4, "p2" with linespoints pointtype 3 (线的不同方式)
>plot "p1" with boxes lt 4(画柱状图)
也可以输出ps图片文件:
>set terminal postscript
>set output "throughput.ps"
>plot "p" with lines
输出eps图片设置:
>set term post enh
>set out "pic.eps"
输出png图片设置:
>set terminal png
>set output "pic.png"
设置网格:
>set grid
[参考文件]
[awk]
1. http://phi.sinica.edu.tw/aspac/reports/94/94011/
[xgraph]
1. http://www.atl.external.lmco.com/proj/csim/xgraph/xgraph.html
[gnuplot]
1. http://phi.sinica.edu.tw/aspac/reports/94/94002/
2. http://sys3.physics.iisc.ernet.in/images/gnuplot.html