Ncl初试

NCL初试 #

Date: 2015/7/31

很早就听说NCL是气象里一个比较好用的东东,但一直没能好好研究一下。其实也是一直不想太深入发展。但此次交流,发现仅仅让对方提供NCL的模板是不够的,作为项目实施者,必须要对客户业务非常了解,那么了解NCL也就成了必须。也罢,反正这几天什么新语言都接触一下,就把NCL拿来玩玩吧。moreNCL的头

一上来就闹了一个笑话,我给对方说好像脚本里引用的好多文件你都没给我啊,结果被BS了。
在NCL的一开始的时候,也会有类似C语言一样的include,不过它不叫include,见下了,按格式写就Ok了。

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

load “$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl” load “$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl” load “$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl”

接下来就是一个begin end括起来的代码段。画图

画图是NCL的重点,所以使用起来也非常的方便,把代码贴在下面,应该非常容易就看懂了。
第一种是啥都不配,直接上的。这里的DEMO用了画坐标图的函数。

wks = gsn_open_wks("x11","gsun01n")
plot = gsn_xy(wks,x,y,False)

wks = gsn_open_wks(“x11”,“gsun01n”) plot = gsn_xy(wks,x,y,False)

另一种是有一堆环境配置,在这里被称作资源配置,配完后上的。这里用了等值线图的函数。

resources = True

resources@... = ... ;这里需要好好配置一下

xwks = gsn_open_wks("x11","gsun02n")
plot = gsn_contour(xwks,EAct,resources)

resources = True

resources@… = … ;这里需要好好配置一下

xwks = gsn_open_wks(“x11”,“gsun02n”) plot = gsn_contour(xwks,EAct,resources)ASCII文件的读入

ASCII文件的读入看起来挺暴力的,从DEMO来看,好像是直接默认列宽是一样的,尚未研究是否还有其他方式。

data = asciiread(filename,(/129,4/),"float")

data = asciiread(filename,(/129,4/),“float”)

上述代码是指从文件中按129行4列读入数据。读进来以后,再对数据进行切分。NC文件的读入

相比之下,NC文件的读入就算太优雅了。

cdf_file = addfile(filename,"r")
pres = cdf_file->Psl(0,:,:)               ; pressure at mean sea level1
lat  = cdf_file->lat                      ; latitude
lon  = cdf_file->lon                      ; longitude

cdf_file = addfile(filename,“r”) pres = cdf_file->Psl(0,:,:) ; pressure at mean sea level1 lat = cdf_file->lat ; latitude lon = cdf_file->lon ; longitude

需要注意的是,这里的Psl是nc文件中定义的一个变量,它是3维的,但这里控制第一维为0,因而读出来的是一张表。如果需要读3维,直接使用

Psl(:,:,:)

Psl(:,:,:)就可以了。资源的定义

资源用来配置图片显示效果,参数巨多,估计用到什么就查什么就好了。

resources                 = True
resources@cnMonoLineColor = False
resources@cnFillOn          = True

resources@tiXAxisString    = lon@long_name
resources@tiYAxisString    = lat@long_name
resources@tiMainString    = pres@long_name

resources = True resources@cnMonoLineColor = False resources@cnFillOn = True

resources@tiXAxisString = lon@long_name resources@tiYAxisString = lat@long_name resources@tiMainString = pres@long_name

上述就是一个资源的简单配的方法,它配了填充、横轴描述、纵轴描述、标题。然后在画图是传进去就可以了。
感觉资源文件好像可以单独的配成一个文件哪,后面再好好研究一下。自定义色标

我个人还是比较看重色标的,在这里定义起来也简单。

cmap = (/(/1.,0.,0./),(/0.,1.,1./)/)
gsn_define_colormap(xwks,cmap)

cmap = (/(/1.,0.,0./),(/0.,1.,1./)/) gsn_define_colormap(xwks,cmap)一些肯定会用到的函数

为了提高效率,NCL不能使用循环,需要循环的都得用矩阵运算来代替。那么有些函数是必须的了,结果DEMO里还没有。。。在此记录一下吧。

  • 生成一个1到100的序列nx = ispan(1,100,1) 生成一个1到100的序列
nx = ispan(1,100,1)

nx = ispan(1,100,1)- 定义一个数组x = new(9, float) 定义一个数组

x = new(9, float)

x = new(9, float) Categories: NCL