不知道大家有没有遇到过这样的甲方or领导or老师or审稿人or Other,每次都会死揪住你的图不放,非说你画的图,没有感受。。
这感受,除了你肚子里的蛔虫,神特么也猜不出来你是什么feel啊!
不过话又说回来,虽然这个所谓的“感受”,很是之主观,很是之任性,很是之不可描述。。但事实上,它也仍是有迹可循的!
在过去的十多年间,NCL能够算做是称霸气象领域的一个主要绘图软件——哪怕GrADS是你大学时期的必修课,你对它早已十分熟悉,但也会由于NCL图片的清爽怡人而一秒沉沦,坚决果断地抛弃晦暗糊涂的GrADS;哪怕你曾经为MATLAB丰富的数学库所吸引,但仍是会由于NCL的细腻柔和而放弃MATLAB充满工业感的坚硬风格。
因此,这也就形成了早你十多年入行的甲方or领导or老师or审稿人or Other,他们对于NCL出图风格的习惯和认同。这个时候,你做为一名习惯于用Python的新生代选手,画出来的图片天然是有着Python,尤为是matplotlib风格的图片,天然是会让“老”人们以为,怪怪的。
可是,如今的NCL,对于新人们来讲,真的是过期了。尤为是,NCAR本身都放弃了对NCL的维护和更新,并且NCL的最新版本V6.6.2真的是难用的一腿:它对于环境格外挑剔,你装个跟它不相干的东西,它都会立马死给你看。并且,NCAR说好的要把NCL转为Python库,甚至还列出了明确的时间节点,可是过了这么久,彷佛又都没有下文了。
因此如今新学NCL,彻底没有意义啊。咱们只要用Python画出NCL风格的图片,就能够了嘛。
而想要模仿NCL风格,最简单的就是用NCL自带的色标啦。
要在Python中调用NCL的色标,有两种方法,一个是直接从NCL的colormap中提取出每个颜色的rgb数值,而后再写入Python中进行绘图。
事实上,这种方法不只能够用于重现NCL的colormap,也能够用来重现其余任何来源的colormap。
举个例子,某一天,你的甲方看到中央气象台的24小时降水预报产品(http://www.nmc.cn/publish/precipitation/1-day.html)图中的colormap,以为高端大气上档次,同时也认为本身家的产品也必须跟国家局保持一致,因而要求你按照这个colormap画图。那你该怎么办?
首先,你须要用Python读取出这几个颜色的rgb值,并把它们写成一个单独的文件,方便之后直接调用,这里将该文件命名为TP_cma.rgb。它的内容就像这样:
而后,用这个colormap和相应的区间进行绘图:
cmpfile='TP_cma.rgb'cmpdata=np.loadtxt(cmpfile)cmpdata=cmpdata/255.0nlvs = [0,0.1,10,25,50,100,250]fig=plt.figure(figsize=[8,5],dpi=300)plt.contourf(lon,lat,pic_data,levels=nlvs,extend='max',colors=cmpdata, zorder=0)plt.savefig(image_out,dpi=300)plt.close('all')
还有一种更简单的方法,就是直接调用cmaps包。它的GitHub地址以下:
https://github.com/hhuangwx/cmaps
camps包里面包含了NCL全部的colormap,这些color table的名字详见NCL官网:
http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml#Blue_Purple
import matplotlib.pyplot as pltimport cmapsimport numpy as npx = y = np.arange(-3.0, 3.01, 0.05)X, Y = np.meshgrid(x, y)Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)plt.pcolormesh(X,Y,Z1,cmap=cmaps.BlGrYeOrReVi200)plt.colorbar()plt.show()
在我印象中,cmaps库是我一位大气所的师兄写的,刚刚写到这里就去问了一下他,发现并非。。因此如今我也不知道是谁写的了
在网上搜了一波,终于在万能的气象家园论坛搜到了出处:
在这里,我要向“又是那隻猫”大神,还有他文中的沈大神表示深深的感谢!cmaps包帮咱们省去了不少重复劳动,并且稳定健壮,很是好用!