gnuplot常用技巧

来源:互联网 发布:shipping test软件 编辑:程序博客网 时间:2024/06/08 14:22

一、        基础篇:

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


1
plot命令

gnuplot> plotsin(x) with linelinetype 3linewidth 2

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

gnuplot> plotsin(x) with pointpointtype 3pointsize 2

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

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

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

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


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


2
、同时画多条曲线

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

 

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

 

3、关于图例的位置

默认位置在右上方。

gnuplot> set keyleft %放在左边,有leftright两个选项

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

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

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

gnuplot> set keyleft bottom %表示左下边


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

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

4、关于坐标轴

gnuplot> setxlabel‘x’  %x轴标为‘x’

gnuplot> setylabel‘y’  %y轴标为’y’

gnuplot> setylabel ‘DOS’ tclt 3%其中的tclt3表示’DOS’的颜色用第三种颜色。

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

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

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

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

gnuplot>set xtics nomirror

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


gnuplot
>set ytics nomirror

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


5
、在图中插入文字

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

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

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

gnuplot> setarrow from 0.0,0.0 to0.6,0.8   %从(0.0,0.0)到(0.6,0.8)画一个箭头

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

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

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

gnuplot>unset arrow 2

将去掉第二个箭头。

7、图的大小和位置

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

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

8、画三维图

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

9.将图形输出到文件

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

gnuplot>set term posteps color solidenh

gnuplot>set output‘a.eps

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

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

gnuplot>plot sin(x) wl

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

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

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

gnuplot>set termjpeg

gnuplot>set output‘a.jpg

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

gnuplot>set termX11

二、提高篇:

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

gnuplot>setmultiplot  %设置为多图模式

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

gnuplot>set size0.5,0.5 %设置第一个图的大小

gnuplot>plot“a1.dat”

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

gnuplot>set size0.5,0.5 %设置第二个图的大小

gnuplot>plot“a2.dat”

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

gnuplot>set size0.5,0.5 %设置第三个图的大小

gnuplot>plot“a3.dat”

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

gnuplot>set size0.5,0.5 %设置第四个图的大小

gnuplot>plot“a4.dat”

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

gnuplot>unsetlabel

 

 

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

gnuplot> set sizesquare   %使图形是方的
gnuplot> set size0.5,0.5   %
使图形是你要的大小
gnuplot> setxrange[-a:a]
gnuplot> setyrange[-a:a]   %
两坐标轴刻度范围一样
gnuplot> plot‘a.dat

 

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

gnuplot> setxtics nomirror  %去掉上面坐标轴x2的刻度
gnuplot> setytics nomirror  %
去掉右边坐标轴y2的刻度
gnuplot> setx2tics      %
让上面坐标轴x2刻度自动产生
gnuplot> sety2tics    %
让右边坐标轴y2的刻度自动产生
gnuplot> plotsin(x),cos(x) axesx1y2   %cos(x)
x1y2坐标,axesx1y2表示用x1y2坐标轴
gnuplot> plotsin(x),cos(x) axesx2y2    %cos(x)
x2y2坐标,axesx2y2表示用x2y2坐标轴
gnuplot> setx2range[-20:20]  %
设定x2坐标的范围
gnuplot> replot
gnuplot> setxrange[-5:5]%
设定x坐标的范围
gnuplot> replot
gnuplot> setxlabel 'x'
gnuplot> set x2label't'
gnuplot> setylabel 'y'
gnuplot> set y2label's'
gnuplot> replot
gnuplot> set title 'Thefigure'
gnuplot> replot
gnuplot> set x2label 't'textcolor lt3   %textcolorlt 3
tc lt 3设置坐标轴名称的颜色

 

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

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

gnuplot> setterminal postscript enhanced

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

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

 

5gnuplot中如何插入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’代表那一列的所有符号都用这个方法输入。

 

6gnuplot画等高线图

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

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

gnuplot>replot

gnuplot>setcontour   %设置画等高线

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

gnuplot>unsetsurface  去掉上面的三维图形

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

gnuplot>set view0,0

gnuplot>replot

 

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

 

7、如何画漂亮的pm3d

gnuplot> setpm3d               %设置pm3d模式

gnuplot> setisosamples50,50      %设置网格点

gnuplot>splotx**2+y**2         %画三维图

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

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

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

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

gnuplot> setisosamples200,200    %使网格变细

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