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

郑小宏

2005-10-21

对于在 Linux 下工作的人,如果你经常要画一些二维图和简单的三维图的话,那么, gnuplot 无疑是一个非常好的选择,不仅图形漂亮,而且操作简单。当然如果需要质量更高的三维图,请用其他的一些专业绘图软件。建议大家学会使用 gnuplot 。这个小软件通常都是 Redhat Linux 自带的,但自带的版本是 3.7 的,建议将其升级到 4.0 ,新版本具有很多新功能。最新版本可以到 http://www.gnuplot.info 下载。

一些最基本的操作请大家看说明书。这里总结一下我在使用过程中遇到的一些问题以及解决的办法,目的是让那些以前不会的或不熟练的能快速入门,会画自己想要的图,因为原来的说明书很长,较难有针对性地很快找到自己想要的信息。这里简单的总结不可能面面俱到,所以大家不要抱怨我写的不全,更全面的了解还是请看说明书,网上的资料也多的是。其实这也是我们从网上一点一点搜集和摸索出来的。我相信看完后,应该平时最常见的问题基本上都能在这里找到答案。如果大家在使用过程中摸索到了我没有写到的技巧和体会,或有其它建议,请大家提告诉我,以不断完善这篇总结,谢谢!

 

一、         基础篇:

linux 命令提示符下运行 gnuplot 命令启动,输入 quit q exit 退出。

 

1 plot 命令

gnuplot > plot sin(x) with line linetype 3 linewidth 2

gnuplot > plot sin(x) w l lt 3 lw 2    % 用线画,线的类型(包括颜色与虚线的类型)是 3 ,线的宽度是 2 ,对函数 sin(x) 作图

gnuplot > plot sin(x) with point pointtype 3 pointsize 2 

gnuplot > plot sin(x) w p pt 3 ps 2    % 用点画,点的类型(包括颜色与点的类型)是 3 ,点的大小是 2

gnuplot > plot sin(x) title 'f(x)' w lplt 3 lw 2 pt 3 ps 2    % 同时用点和线画,这里 title ‘f(x)’ 表示图例上标 'f(x)' ,如果不用则用默认选项

gnuplot > plot sin(x)    % 此时所有选项均用默认值。如果缺某一项则将用默认值

gnuplot > plot ‘a.dat’ u 2:3  w l lt 3 lw 2 % 利用数据文件 a.dat 中的第二和第三列作图

 

顺便提一下,如这里最前面的两个例子所示,在 gnuplot 中,如果某两个词,按字母先后顺序,前面某几个字母相同,后面的不同,那么只要写到第一个不同的字母就可以了。如 with ,由于没有其它以 w 开头的词,因此可以用 w 代替, line 也可以用 l 代替。

 

2 、同时画多条曲线

gnuplot > plot sin(x) title ‘sin(x)’ w l lt 1 lw 2, cos(x) title ‘cos(x)’  w l lt 2 lw 2  %两条曲线是用逗号隔开的。画多条曲线时,各曲线间均用逗号隔开就可以了。

 

以上例子中是对函数作图,如果对数据文件作图,将函数名称换为数据文件名即可,但要用单引号引起来。

 

3 、关于图例的位置

默认位置在右上方。

gnuplot > set key left  % 放在左边,有 left right 两个选项

gnuplot > set key bottom  % 放在下边,只有这一个选项;默认在上边

gnuplot > set key outside  % 放在外边,但只能在右面的外边

以上三个选项可以进行组合。如:

gnuplot > set key left bottom  % 表示左下边

 

还可以直接用坐标精确表示图例的位置,如

gnuplot > set key 0.5,0.6  % 将图例放在 0.5,0.6 的位置处

 

4 、关于坐标轴

gnuplot > set xlabel ‘x’   %x 轴标为 ‘x’

gnuplot > set ylabel ‘y’   %y 轴标为 ’y’

gnuplot > set ylabel ‘DOS’ tclt 3  % 其中的 tc lt 3 表示 ’DOS’ 的颜色用第三种颜色。

gnuplot > set xtics 1.0    %x 轴的主刻度的宽度为 1.0 ,同样可以为 y 轴定义 ytics

gnuplot > set mxtics 3    %x 轴上每个主刻度中画 3 个分刻度,同样可以为 y 轴定义 mytics

gnuplot > set border 3 lt 3 lw 2 % 设为第三种边界,颜色类型为 3 ,线宽为 2

同样可以为上边的 x 轴(称为 x2 )和右边 y (称为 y2 )轴进行设置,即 x2tics mx2tics y2tics my2tics

gnuplot > set xticsnomirror

gnuplot > unset x2tics     % 以上两条命令去掉上边 x2 轴的刻度

 

gnuplot > set yticsnomirror

gnuplot > unset y2tics     % 以上两条命令去掉右边 y 轴的刻度

 

5 、在图中插入文字

gnuplot > set label ‘sin(x)’ at 0.5,0.5  % 在坐标( 0.5,0.5 )处加入字符串 ’sin(x)’

在输出为 .ps .eps 文件时,如果在 set term 的语句中加入了 enhanced 选现,则可以插入上下标、希腊字母和特殊符号。上下标的插入和 latex 中的方法是一样的。

 

6 、在图中添加直线和箭头

gnuplot > set arrow from 0.0,0.0 to 0.6,0.8    % 从( 0.0,0.0 )到( 0.6,0.8 )画一个箭头

gnuplot > set arrow from 0.0,0.0 to 0.6,0.8 lt 3 lw 2   % 这个箭头颜色类型为 3 ,线宽类型为 2

gnuplot > set arrow from 0.0,0.0 to 0.6,0.8 noheadlt 3 lw 2  % 利用 nohead 可以去掉箭头的头部,这就是添加直线的方法。

 

注意,在 gnuplot 中,对于插入多个的 label arrow 等等,系统会默认按先后顺序分别对各个 label arrow 进行编号,从 1 开始。如果以后要去掉某个 label arrow ,那么只要用 unset 命令将相应的去掉即可。如:

gnuplot > unset arrow 2

将去掉第二个箭头。

 

7 、图的大小和位置

gnuplot >set size 0.5,0.5  % 长宽均为默认宽度的一半,建议用这个取值,尤其是画成 ps eps 图形的时候

gnuplot >set origin 0.0,0.5   % 设定图的最左下角的那一点在图形面板中的位置。这里图将出现在左上角。

 

8 、画三维图

gnuplot >splot 文件名 ’ u 2:4:5  % 以第二和第四列作为 x y 坐标,第五列为 z 坐标。

 

9 .将图形输出到文件

gnuplot 中,输出文件的格式是由 terminal 来控制的。默认的情况下,都是输出到屏幕,即终端模式为 X11 。如果想输出到文件,则必须对 terminal 进行设置。要了解有那些终端类型,可以输入 set terminal 后回车,所有支持的终端模式(或文件格式)都列出来了。就我来说,输出文件的格式用得最多的是 ps eps 文件。这在运行画图命令 plot splot 前必须先运行如下两条命令:

 

gnuplot > set term post eps color solid enh

gnuplot > set output ‘a.eps

 

其中第一条命令为设置终端模式, post 即为 postscript 模式,这是输出到 ps eps 文件必须有的。后面的 eps color solid 以及 enh 选项均可以有或没有,根据你的需要。 eps 表示输出为 eps 文件,没有就输出为 ps 文件; color 表示输出图形为彩色,不用就会保存为黑白的; solid 表示输出图中的所有线都用实线,不用则除了第一条线为实线外,其它的均用不同的虚线;使用 enh (enhanced) 选项可以在图中插入上下标、希腊字母和特殊符号,不用则不能实现这些功能。后面的选项可以根据自己的需要选择一个或几个。

 

第二条命令对 output 的设置表示要输出的文件的名字。但是请注意,运行完这条命令后,还仅仅是定义了输出文件的名字,实际上,图还没画到这个文件里去。因此运行这两条命令还只是进行了必须的设置。然后运行如下命令

gnuplot > plot sin(x) w l

gnuplot >replot (假如前面已经运行过 plot replot 命令的话)

这时,图形就在上面指定的文件中了。

 

要输出为其它格式,同样要进行这样的设置,比如要输出为 jpg 格式,则在运行画图命令前先运行如下命令:

gnuplot > set term jpeg

gnuplot > set output ‘a.jpg

 

如果要由其它模式再返回到输出到屏幕,则运行如下命令:

gnuplot > set term X11

二、提高篇:

1 、如何在同一张图里同时画多个图

gnuplot >set multiplot   % 设置为多图模式

gnuplot >set origin 0.0,0.5   % 设置第一个图的原点的位置

gnuplot >set size 0.5,0.5  % 设置第一个图的大小

gnuplot > plot “a1.dat”

gnuplot >set origin 0.5,0.5   % 设置第二个图的原点的位置

gnuplot >set size 0.5,0.5   % 设置第二个图的大小

gnuplot > plot “a2.dat”

gnuplot >set origin 0.0,0.0   % 设置第三个图的原点的位置

gnuplot >set size 0.5,0.5  % 设置第三个图的大小

gnuplot > plot “a3.dat”

gnuplot >set origin 0.5,0.0   % 设置第四个图的原点的位置

gnuplot >set size 0.5,0.5  % 设置第四个图的大小

gnuplot > plot “a4.dat”

当然,如果后一个图中的某个量的设置和前一个的相同,那么后一个中的这个量的设置可以省略。例如上面对第二、第三和第四个图的大小的设置。前一个图中对某个量的设置也会在后一个图中起作用。如果要取消在后面图中的作用,必须用如下命令,如取消 label ,用

gnuplot > unset label

 

 

2 、作二维图时,如何使两边坐标轴的单位长度等长

gnuplot > set size square    % 使图形是方的
gnuplot> set size 0.5,0.5    %
使图形是你要的大小
gnuplot> set xrange[-a:a]
gnuplot> set yrange[-a:a]    %
两坐标轴刻度范围一样
gnuplot> plot ‘a.dat

 

3 、如何在同一张图里利用左右两边的 y 轴分别画图

gnuplot > set xticsnomirror   % 去掉上面坐标轴 x2 的刻度
gnuplot> set yticsnomirror   %
去掉右边坐标轴 y2 的刻度
gnuplot> set x2tics       %
让上面坐标轴 x2 刻度自动产生
gnuplot> set y2tics     %
让右边坐标轴 y2 的刻度自动产生
gnuplot> plot sin(x),cos(x) axes x1y2    %cos(x)
x1y2 坐标, axes x1y2 表示用 x1y2 坐标轴
gnuplot> plot sin(x),cos(x) axes x2y2     %cos(x)
x2y2 坐标, axes x2y2 表示用 x2y2 坐标轴
gnuplot> set x2range[-20:20]   %
设定 x2 坐标的范围
gnuplot> replot
gnuplot> set xrange[-5:5]  %
设定 x 坐标的范围
gnuplot> replot
gnuplot> set xlabel 'x'
gnuplot> set x2label 't'
gnuplot> set ylabel 'y'
gnuplot> set y2label 's'
gnuplot> replot
gnuplot> set title 'The figure'
gnuplot> replot
gnuplot> set x2label 't' textcolorlt 3    %textcolorlt 3
tc lt 3 设置坐标轴名称的颜色

 

4 、如何插入希腊字母和特殊符号

一般只能在 ps eps 图中,且必须指定 enhanced 选项。在 X11 终端(即显示器)中无法显示。

gnuplot > set terminal postscript enhanced

然后希腊字母就可以通过 {/Symbol a} 输入。例如

gnuplot > set label ‘{/Symbol a}’

各种希腊字母与特殊符号的输入方法请见安装包中 gnuplot- 4.0.0 /docs/psdoc 目录下的 ps_guide.ps 文件。


另外还可参见:
http://t16web.lanl.gov/Kawano/gnuplot/label-e.html#4.3

 

5 gnuplot 中如何插入 Angstrom (埃)这个符号 (A 上面一个小圆圈 )

				脚本中在插入前先加入
				
						
						
				
		
				
						
								gnuplot
						
				
				
						>
				
				set encoding iso_8859_1
		
				这个命令,然后就可以通过
				“{\305}”
				加入了。如横坐标要标上“
				k(1/
				Å
				)
				”:
				
						
						
				
		
				
						
								gnuplot
						
				
				
						>
				
				set xlabel 'k(1/{\305})
		
				
						 
				
		
				如果是
				
						multiplot
				
				模式,则这个命令必须放在
				
						
						
				
		
				
						
								gnuplot
						
				
				
						>
				
				set multiplot
		
				的前面。
				
						
						
				
		
				
						 
				
		
				如果后面还要插入别的转义字符,那么还要在插入字符后加入如下命令:
				
						
						
				
		
				
						set
				
				 encoding default
		
				
						 
				
		
				安装包
				
				gnuplot-
				
						4.0.0
				
				/docs/psdoc/ps_guide.ps
				文件中的表中的‘
				E
				’代表那一列的
				所有符号都用这个方法输入。
				
						
						
				
		

 

6 gnuplot 画等高线图

gnuplot >splot  ‘ 文件名 .dat’  u 1:2:3  w  l   % 做三维图

gnuplot >set dgrid3d 100,100 % 设置三维图表面的网格的数目

gnuplot > replot

gnuplot >set contour    % 设置画等高线

gnuplot >set cntrparam  levels  incremental -0.2,0.01,0.2   % 设置等高线的疏密和范围,数据从    -0.2 0.2 中间每隔 0.01 画一条线

gnuplot >unset surface   去掉上面的三维图形

最后用鼠标拽动图形,选择合理的角度即可。或者直接设置 (0,0) 的视角也可以:

gnuplot > set view 0,0

gnuplot > replot

 

这里注意,画三维图的数据文件必须是分块的,也就是 x 每变换一个值, y 在其变化范围内变化一周,这样作为一块,然后再取一个 x 值, y 再变化一周,作为下一数据块,等等。块与块之间用一空行格开。

 

7 、如何画漂亮的 pm3d

gnuplot > set pm3d                % 设置 pm3d 模式

gnuplot > set isosamples 50,50       % 设置网格点

gnuplot > splot x**2+y**2          %画三维图

gnuplot > splot x**2+y**2 w pm3d   %画成 pm3d 模式,注意比较变化

gnuplot > set view 0,0              %设置视角,( 0 0 )将投影到底面上去

gnuplot > splot x**2+y**2 w pm3d   %重画,注意看变化

gnuplot > unset ztics               % z 轴上的数字给去掉

gnuplot > set isosamples 200,200     %使网格变细

gnuplot > replot                   %重画,注意看变化,主要是过渡更光滑

 

8 、利用脚本文件避免重复输入

有时候对某个数据文件做好一张图后,下次可能还要利用这个数据文件作图,但某个或某些设置要作些细微变化。这时候,可以把第一次作图时的命令全部写到一个文件里,如 a.plt ,下次只要将相应的设置做修改后,用下面的命令就会自动运行文件所有的命令而最后得到你要的图:

gnuplot > load ‘a.plt

作为一个例子,假设文件名为 a.plt ,里面的内容为:

set pm3d

set view 0,0

unset ztics

set isosamples 200,200

splot x**2+y**2 w pm3d

set term post color

set output ‘a.ps

replot

 

那么启动 gnuplot 后,只要运行如下命令就可以了:

gnuplot > load ‘a.plt

 

如果我们要得到的仅仅是 .ps .eps 图,那也可以在 linux 命令提示符下直接运行如下命令:

[zxh@theoryzxh]$gnuplota.plt

 

9 、在 gnuplot 模式下运行 linux 命令

gnuplot 提示符下也可以运行 linux 命令,但必须在相应的命令前面加上 ! 号。例如,假设很多参量都已经设置好了,但需要对某个数据文件 a.dat 进行修改后再画图,则可以用如下方式

gnuplot >!vi a.dat

通过这种方式,所有的 linux 命令都可以在 gnuplot 环境里运行。

 

另外,也可以在 gnuplot 的提示符后输入 shell ,暂时性退出 gnuplot ,进入 linux 环境,做完要做的事情后,运行 exit 命令,又回到 gnuplot 环境下。

gnuplot > shell

[zxh@theoryzxh]$via.f

[zxh@theoryzxh]$f 77 a .f

[zxh@theoryzxh]$a.out    ( 假设生成 a.dat 数据文件 )

[zxh@theoryzxh]$exit

gnuplot >plot ‘a.dat’ w l

 

如有其它问题,欢迎共同探讨。 E-mail exhzheng@163.com

posted on 2006-06-12 14:24 思考 阅读(2035) 评论(0)  编辑  收藏 所属分类: 网络仿真

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


网站导航: