Surfer8.0初学者手册
原创:Addison
2003.05.21
一、简介
GoldenSoftwareSurfer8.0(以下简称Surfer)是一款画三维图(等高线,imagemap,3d
surface)的软件,该软件简单易学,可以在几分钟内学会主要内容,且其自带的英文帮助(help
菜单)对如何使用surfer解释的很详细,其中的tutorial教程更是清晰的介绍了surfer的简单
应用,应该说surfer软件自带的帮助文件是相当完美且容易阅读的,只要学过英语的人都可
以很快上手。
Surfer是具有插值功能的绘图软件,因此,即使你的数据是不等间距的,依然可以用它
作图。但依据作者的经验,最好不使用Surfer自带的插值功能,尤其是要精确确定等高线时。
由于surfer是美国的一个软件,它不提供对中文的支持,这可以算的上一个小的遗憾。
Surfer的主要功能是绘制等高线图(contourmap),此外它还可以绘制postmap,clasd
postmap,vectormap,imagemap,wireframemap,3dsurfacemap,等形式的图形。其
功能是比较强的,但没有各种投影变化是它的一大缺点。尤其是在等高线领域,这不能不说
是它的应用受到限制的地方。
由于surfer软件没有中文说明书,对一些初学者来说可能会存在上手较难的问题,鉴于
此种需求,编写了这一初学者参考手册,希望对大家有所帮助。
二、等高线的绘制
Surfer的最主要的功能是绘制等高线图,但并不是我们具有了数据文件就可以直接绘制等高
线,surfer要求绘制等高线的数据有特殊的格式要求,即首先要将数据文件转换成Surfer认
识的grd文件格式,才能绘制等高线(当然,可以直接生成surfer接受的ascii码的grd文
件格式,这样就可以直接作图,此方法将在后面介绍,首先我们介绍常用的作图方法)。假
设你有三列数据分别为X,Y,Z,其中Z为点(x,y)处的值,存在文件中(数据
见附件),其中第一列是X坐标,第二列是Y坐标,第三列是(x,y)上的值Z,则绘制等
高线的步骤如下:
步骤一:把数据文件转换成grd文件
1.打开菜单Grid|Data...,在open对话框中选择数据文件
2.这会打开“GridData”对话框。在“DataColumns”中选择要进行GRID的网格数
据(X和Y坐标)以及格点上的值(Z列),这里我们不用选择,因只有3列数据
且它们的排列顺利已经是XYZ了,如果是多列数据,则可以在下拉菜单中选择所
需要的列数据。选择好坐标XY和Z值后,在“GridingMethod"中选择一种插值方
法(如果你需要比原始数据的网格X和Y更密的Z数据,或是你的网格是非均匀
的),则在Grid的过程中,Surfer会自动进行插值计算,生成更密网格的数据。如
果你只是想绘制原始数据的图,不想插值,则最好选择距离平方反比法(inver
distancetoapower)或Kriging方法。因为这两种方法在插值点与取样点重合时,插
值点的值就是样本点的值,而其它方法不能保证如此。在"OutputGridFile“中输入
输出文件名,然后在“GridLineGeometry”中设置网格点数。这里需要注意
的是,当X和Y的数值相差很大时,这里显示的最大最小值可能有错误(即与原始
数据不同),这是Surfer软件本身的问题,遇到这种情况,必须手动改正这种错误,
即输入正确的最大最小值。由于我们的数据没有此类问题,因此不必手动改正最大
最小值。但必须手动改正X和Y的间距“spacing”或数据个数“#f”,这二者是
相关的,改动一个,另一个自动改正。如果你的原始数据是等间距的,这里的X和
Y的间距“spacing"或”#f“最好与原数据一致,这样可以减少插值带来的误差。
我们的数据是不均匀的,所以必须插值,这里可以不进行任何改动。好了,点“ok”,
画图所需要的grd文件就生成了。
步骤二:画等高线
打开菜单“Map|CountourMap|NewCountourMap",在“OpenGrid”对话框中
选择刚才输出的grd文件,如,点“ok”,则一副等高线图就画完了。
步骤三:等高线图的设置
在所画的等高线图中双击鼠标,或点击右键,选中“属性”,就会出现设置等高
线的各种属性,在图的边缘双击鼠标则可以改动坐标轴的属性。
等高线图的着色(fill)和设置
双击等高线图,就会出现“map:countourproperities”对话框,现在介绍此对话框中的
设置。
“General”选项卡中:
1、“inputgridfile”
为打开的等高线图的grid文件名,你可以修改此处,打开不同的文件(几乎没人
这样做),点一下打开文件图标旁的“i”图标,则可以看到当前grid文件的基本统计
信息,如最大最小值等。
2、“filledcountours”
选中fillcountour(在前面的方框中点一下鼠标),就可以画着色的等高线图了,
如果再选中下面的“colorscale”的话,则可以在等高线图旁边给出色彩棒。
3、“smothing”
选中的话可以对等高线进行平滑,在amount中有“低、中、高”三种选择。这一
项一般可以不选,除非你画出的等高线图中的等高线非常的不平滑,这项只起到美化
图形的结果,没有更大的意义。
4、“blankedregions”
这项可以对空白区域进行着色,只有在你的等高线中有空白区域时才有意义,一
般不用。
5、“faultline”
可以设置等高线的粗细颜色等。
“Levels”选项卡中:
1、“level”
点击“level”可以设置等高线的最大最小值和等高线间的等高距,这可以对所有
的等高线发生作用,通过调节此项可以使等高线分布均匀,易于看清楚,作图更美观。
如不想人为改动,可用缺省值。双击level下面的数字,可以单独更改等高线的值,但
要注意等高线从小到大的规律,不能瞎改。
2、“line”
点击“line”可以设置等高线的线型。
3、“properities”
选中“uniform”,则线型是统一的,选中“gradation”,则线的颜色是渐变的。选
择好“properities”后,就可以更改下面的线型(style)和颜色(color)已经线的粗细
(line)。当选“gradation”时,线的颜色是渐变的,点一下color旁边的颜色区,就会
出现“colorspectrum”选项,点一下“盾形”图标(在颜色条的左右两端上方),就可
以分别点选下面的颜色了,当然,也可以自己加入“盾形”图标,加自己的颜色。或
是用“load”调用调色板文件(*.clr),在surfer8目录下就有。“affectedlevels”可以有
选择的对等高线的线型颜色进行设置,这里不再详细介绍,只要自己动手改改那里边
的三个数字,你很快就会弄明白。此外,还可以通过双击line下面的线来改变某一根
等高线的具体属性。
4、“fill”
此选项只有在着色等高线图中才有效,对单独的等高线图无作用。点击“fill”设
置着色。着色与“line”选项中的内容类似,不再详细介绍。同样,可以通过双击“fill”
下面的具体颜色条来对特定的等高线区域进行着色。
5、“labels”
设置等高线标注数字,比较简单。双击下面的“yes”或“no”可以改变是否显示
标注。
6、“hach”
用来画等高线的上下方向(即上山或下山方向),一般不用。
7、“add”和“delete”
在右边的按钮。当选中某一level后,点“add”按钮可以在两个level之间插入
一新的level。Delete按钮则删除选中的level
“view”选项卡中
用来调整等高线图的整体方向,除了在3dsurface情况下,一般不用。
“scale”选项卡中
用来设置xyz轴的比例,可以调整其长度选项。一般情况不需调整,除非X和Y
相差很大,为了方便看图可以调整其到合适的长度。
“limits”选项卡中:
可以用来裁剪等高线图(通过设置xy的最小最大值),从而得到感兴趣地方大小
的图形。
“background”选项卡中:
可用来设置背景填色,一般不用。
横纵(xy)坐标轴的设置:
双击横轴和纵轴所在的位置,就可以打开坐标轴属性对话框“mapbottom(orleftortop
orright)axisproperties”下面以bottom轴为例,其它类似:
“gernal”选项卡:
“Title”,在空白处可以输入轴的说明或图的说明文字,用“offtalong”和“offt
from”可以设置说明文字的位置,“font”可以选择字体,“angle”可以选择文字的旋
转角度。
“labels”,设置轴的刻度值。
“axisplane”设置轴平面,一般不改动。
“axis”设置轴线属性。
“ticks”选项卡:
设置轴线上刻度的长度,方向,主刻度和辅助刻度。
“scaling”选项卡:
设置刻度值(label)的起始值(firstmajor),间隔(major)和最后值(lastmajor)。其它值
一般不修改。
“gridlines”选项卡:
用来设置等高线图的坐标网格,用鼠标点击“show”即可。
此外,以上等高线的所有属性都可以通过双击左边的“objectmanager”(或在“view”菜单
中)属性窗口来设置,与直接在图中设置无异。
三、在等高线图上加上背景地图(bamap)(世界地图或局部地图)
我们经常需要把世界地图放在等高线图下面作为参考,世界地图在surfer中的格式是
*.bln,*.gsb,*.jpg,*.gif等多种形式,比较常用的是*.bln文件,这些地图在surfer的官方网站
/都有,可以自由下载。在附件中提供给大家一个世界地图的
bln文件,文件名。
在surfer中打开map|bamap...然后打开文件,就可以画出世界地图了。
用view|fitto
window可以
很好的显示.
然后我们可
以把相应的
等高线图用
第二部分的
方法画出(注
意bamap
的网格坐标
必须与等高
线图的网格
坐标一致,至
少bamap
的网格坐标要包含等高线图的网格坐标)。再按F2键(选中所有对象,或ctrl+A),点击
map|overlapmaps就可以将两幅图合成一副图。打开view|objectmanager,选中"ba",点右
键,选orderoverlay|movetofront就可以将背景图移到前面一层。这样一份好的等高线图就
画好了。(见右图)
四、bln文件及blank作图
大家看了第三部分的图有可能会奇怪,为什么你的等高线只在海洋上有,陆地上怎么没
有呢?这就是此节要讲的内容。首先讲一下bln文件的格式,bln文件具有以下格式:
length,flag
x1,y1
x2,y2
...
xn,yn
length,flag
x1,y1
x2,y2
...
xn,yn
其中,length是背景地图曲线中点坐标的个数,如果xn=x1,yn=y1,那么所有的点将围成
一个圈。如果不是这样,则是一条不闭合的曲线。flag的值为1或0,当flag=1时,闭合
曲线里面的等高线可以用此bln文件blank掉(即将闭合曲线中的等高线消除),如果flag=0,
则是曲线外面的等高线被blank。我所提供的bln文件为flag=1的格式,当然可以将其改成
0。简单介绍了bln文件的格式,再来介绍怎样blank等高线。假设我们已经有了一个全球的
等高线图,其原始数据文件为.打开grid|blank...选择文件,"ok",然后在新的对
话框中选择,"ok",再在新的对话框中输入要输出的grd文件的名字,点ok就
可以得到一个blank过的grd文件(假设为),则用再做等高线图,即可出现我
所给第三部分中图的效果.
五、应用surfer给出数据文件的统计性质
在应用数据作图前,有时候需要知道每列数据的统计性质,如最大值,最小值,标准差
等。应用surfer的worksheet可以很方便的解决此问题。打开file|new选中worksheet,则出
现一个类似excel的表格,在此环境下,可以用file|open来打开需要查看的数据文件,譬如
。如果我们想知道B列的统计性质,则点击B,再打开菜单data|statics...,选"ok",
就会出现统计结果。同时,我们还可以对各列进行数学运算,譬如我想生成新的一列D,
它是B列的平方加上C列的和,则先点击D列(空白列),再打开菜单data|transform...在
transformequation下输入“D=B*B+C”点击"ok",则会生成D列数据,只要将文件另存为
新文档就可以了。当然,你还可以用surfer的worksheet做很多类似的计算。应该说,surfer
的这一功能是很实用的,当然,还可以用data|sort...对数据进行排序。
六、postmap和clasdpostmap
有时候,我们需要在bamap中添加台站的坐标,并用三角,五星等符合将其标出,
且在旁边写上台站的名字,这可以用postmap和clasdpostmap完成。首先介绍postmap,
它的数据文件一般格式是:
x1,y1,label1
x2,y2,label2
...
xn,yn,labeln
其中,xn,yn为坐标值,label为数
字或文字。我们还是以为例
子,打开map|postmap|newpost
map...,选择文件,选"ok",
则会出现一副postmap的图,双击
图的中央,就会打开其属性。在
gernal选项中可以设置坐标列,以及
symbol(可更改为其它的形状,缺
省为十字)。在labels选项中,可以
通过"worksheetcolumnforlabel"设
置label,此处我们选择c列,则c
列的值会出现在每个坐标点的上
方。(如图所示)至于其它的设置跟
等高线类似,不再详述。
至于clasdpostmap与postmap类似,只是对不同的点,根据某些规则分类而已。譬
如还是文件,我们把c列看成是每个点的高程,则可以根据高程对各点分类。如高
程在25-54的用十字表示,88-105的用三角表示等。打开map|postmap|newclasdpostmap...,
选择文件,选"ok",则出现一副clasdpostmap,双击图可以编辑属性,这里会多一
个"class"选项卡,这里的选项最大最小值,symbol等都可以改,不再详述。需要注意的是
clasdpostmap至少要有三列数据,其中第三列就是分类的标准。
七、vectormap向量图(或风向图)
很多人是学习大气和海洋的,因此经常要画风向量图或海流的向量图,surfer可以轻松的
完成,且图形可以调整,因此可以生成很漂亮的图形。vectormap分1-gridvectormap和
2-gridvectormap两种。首先介绍1-gridvectormap:
1-gridvectormap可以给出坐标点的方向和振幅大小,但它一般表示的是等高线的下山
方向和大小,是等高线图的一种特殊表现方式,如应用就可以做出。打开map|vector
map|new1-gridvectormap,选中,则会出现一副箭头图。通过双击图的中央可以编
辑它的属性,此图一般很少应用,因此其属性设置不再详述,感兴趣的朋友可以自己试一下。
下面主要讲2-gridvectormap,2-gridvectormap用到两个不同的grd文件,一般讲这两
个文件应该有相同的坐标网格。2-gridvectormap的grd文件可以有两种表示方法,一种是
直角坐标形式,一种是极坐标形式。对直角坐标形式,其中一个grd文件里是x方向的值,
另一个是y方向的值。对极坐标形式,一个grd文件是vector的方向,另一个grd文件是vector
的振幅值。下面举个具体的例子来说明如何作图。假设我们已经有了风分量u和v的两个
直角坐标的grd文件(包括xywindu三个分量),名字分别为和
两个grd文件(需要注意的是,这两个文件已经是ascii码的grd文件,看
不到相应的三个分量,但不需要再进行grid过程,可以直接应用,至于如何生成这种形式
的grd文件,我将在后面具体解释)。打开map|vectormap|new2-gridvectormap,将打开"open
xcomponent(angle)grid"对话框,此时选中(注意,需要在文件类型中选
择allfiles(*.*)才可以选择*.dat文件),随后会打开"openycomponent(length)grid"对话框,
此时选中,选择"ok",就会出现一副风的箭头图,再加上bamap就成了
一副很漂亮的图(如图所
示)。通过双击就可以打开
此图的属性(mapvectors
properties)。注意:在"data"选
项卡中,coordinatesystem
要选cartesian(x,y)(如果你用
极坐标,就选polar(angle,
length))。在"symbol"选项卡
中可以修改箭头的形状,线
的属性,其中frequency是
设置x和y方向需要箭头的
频率,此处我们改为3,3,即在x和y方向都是每3点画一个箭头,也即省略了两点。其
中的colorscaling可以会色彩箭头,大家可以看一下效果(此处我没有改动)。在"scaling"选
项卡中,可以设置箭头起始点的位置(symbol项),以及箭头长度的比例形式(线性,log,平
方根等,在scaling项中改)。在右边还有两个选项,一个是反转箭头方向,一个是给出箭头
的图标(legend),选中后者。在下面可以设置箭头的各个属性(mangitude,shaftlength,head
length和symbolwidth,分别表示风的振幅大小(可改,这里选用缺省值),箭头杆的长度,
箭头头的长度和箭头的宽度,这里其最小最大值分别为(后三项)0.04in,0.2in,0.04in,0.04in,
0.01in,0.01in)。在"scale"选项卡中,选择xscale下的length为6in,yscale下的length为
3in。其它属性不做改动,即可生成我所给的图形。当然,你也可以给出风uv项的角度和
振幅,用极坐标来画图,这其中要注意极坐标的参考点可以是东(角度逆时针)或北(角度顺时
针),请注意选择(在属性的"data"选项卡中修改,且其角度可以用度或弧度作单位,请小心
区分)。
八、ascii码的grd文件及插值问题
在第七部分给出的grd文件是ascii码的直接grd文件格式,无需进行grid过程,这样
做简单,准确,可以在工作和学习过程中提供很多方便。下面做一详细介绍:
ascii码的直接grd文件格式包括5个文件头信息(关于网格的限制),然后是z的值,值得注
意的是,这种文件格式必须用空格来区分两个数据。其一般格式为:
DSAA(注意,必须大写且从第一行第一列开始,即DSAA前面不能有空格)
nxny(x方向网格点的个数nx,y方向网格点的个数ny)
xloxhi(x方向网格点的最小值和最大值)
yloyhi(y方向网格点的最小值和最大值)
zlozhi(z方向网格点的最小值和最大值)
gridrow1(z的值在点(x1,y1),(x2,y1),....(xn,y1))
gridrow2(z的值在点(x1,y2),(x2,y2),....(xn,y2))
gridrow........
gridrown(z的值在点(x1,yn),(x2,yn),....(xn,yn))
注意,此处x1
下面是一个具体的例子:
DSAA
1010
0.09.0
11.020.0
25.0097.19
91.0377.2160.5546.6752.7364.0541.1954.9944.3025.00
96.0481.1062.3848.7457.5063.2748.6760.8151.7833.63
92.1085.0565.0953.0164.4465.6452.5366.5459.2941.33
94.0485.6365.5655.3273.1870.8855.3576.2767.2045.78
97.1982.0064.2161.9782.9980.3458.5586.2875.0248.75
91.3678.7364.0565.6082.5881.3761.1689.0981.3654.87
86.3177.5867.7168.5073.3774.8465.3595.5585.9255.76
80.8875.5674.3572.4766.9375.4986.3992.1084.4155.00
74.7766.0270.2975.1660.5665.5685.0789.8174.5351.69
70.0054.1962.2774.5155.9555.4271.2174.6363.1444.99
在这个例子中,共有100个z的值,其中x为10个,y为10个,x的最小最大值是0.0和
9.0,y的最小最大值是11.0和20.0,z的最小最大值是25.00和97.19,最后是100个z的
值,每行10个值,共10行。当然,我们也没有必要这样排列,只有顺序不变,照样可以
每行只有一个值,即类似下面的排法:
....(省略了文件头信息)
91.03
77.21
60.55
...
74.63
63.14
44.99
这里我给出一个FORTRAN语言生成ascii码grd文件的子程序,仅供参考:
--------------------------------------------------------------------------------------------------------------------
!writegoldensoftwaresurfer8.0gridformatdatabyascii(3d)
!num_x,num_y=numberinxandydirectionrespectively
!x_begin,x_end,y_begin,y_end=thebeginandendvalueinxandydirectionrespectively
!z(num_x,num_y)=zvalueatgridxandypoint
!iunit,filename=openfileunitandnametowritethe3ddata
subroutinewr_surfer_grid(num_x,num_y,x_begin,x_end,y_begin,y_end,z,iunit,filename)
implicitnone
integer,intent(in)::num_x,num_y,iunit
real,intent(in)::x_begin,x_end,y_begin,y_end,z(num_x,num_y)
character(len
=
*),intent(in)::filename
integeri,j
clo(iunit)
open(iunit,file
=
filename//'.')
write(iunit,'(4a)')'dsaa'
write(iunit,*)num_x,num_y
write(iunit,*)x_begin,x_end
write(iunit,*)y_begin,y_end
write(iunit,*)minval(z),maxval(z)
doj
=
1,num_y;doi
=
1,num_x
write(iunit,*)z(i,j)
enddo;enddo
clo(iunit)
print*,''
print*,'outputdatatofile:',filename//'.'
print*,''
endsubroutinewr_surfer_grid
-------------------------------------------------------------------------------------------------------
近些日子,有人问surfer8中的插值哪种好?我个人的观点,如果你的数据的网格是均
匀的,那么,最好用我提供的这种ascii码的grd文件直接作图。这样做的好处是显而易见
的,即不会产生作图误差,且不会出现其它小问题,如不能正确处理x和y坐标(当二者差
异较大时等)。我不主张在作图过程中进行插值计算。如果你的网格是非均匀的,则可能需
要进行插值,我在前面介绍过在哪里选择,我个人认为比较好的是前两种(inver
distancetoapower和Kriging方法),至于插值方法的详细介绍请参考help|contents|index中
查找interpolation主题词。因为时间关系,不再介绍插值问题。
此外,surfer还可以做imagemap,shadedreliefmap,wireframemap,3dsurfacemap等
多种map形式,这些其实都是等高线图的其它表现形式,所用的文件就是grd文件,只是表
现形式不同而已,至于具体设置,相信大家已经可以轻松搞定。
最后介绍一下surfer图形的输出,当作好图以后,可以按F2键,再按ctrl+c,就可以将
图形复制,可以直接粘贴到word文档中。此外,还可以通过file|export菜单输出各种格式
的图形(如jpeg,wmf等)。至于向量图eps的输出,可以通过eps打印机进行。
Surfer还有一些辅助功能,如函数直接作图等(在grid菜单中),标注文字,画简单的图形等,
请大家自己参考help进行学习,这些在现在的基础上,应该是很简单的问题。
感谢funny斑竹的支持,希望我所写的对大家有所帮助,那将是我最大的荣幸。再次感
谢朋友们关注surfer作图。
任何问题和建议请发送到addison0220_cn@
(over,thoughIdonotwanttosaygoodbye!)
(全文完)
本文发布于:2022-12-31 19:18:47,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/67316.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |