不知道大家有沒有遇到過這樣的甲方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包幫咱們省去了不少重複勞動,並且穩定健壯,很是好用!