從昨天下午開始的折騰終於告一段落,雖然解決得不甚完善,只是圖可以用了……
問題起自想把之前手動拼成的一頁四張的圖用腳本自動生成,這樣一方面應該對得更齊一點,另一方面大大節省人工。
這本來應該是件很容易的事情,NCL里面有一個gsn_panel命令就是用來完成這個的,之前也使用過。於是費了不少工夫把原來畫四張小圖的程序粘在一起,最后只要生成一張包含這四個小圖的大圖就行了。問題出現了,四個小圖竟然對不齊!第三個小圖明顯比人家短,第一行的兩張圖也不一樣寬……不可leng!
一開始問題更嚴重一些,圖超出頁邊,有一部分顯示不了,這個之前就遇到過,用取消最大化設置(res@gsnMaximize = False)勉強應付了。這回發現了新方法,在定義panel的設置時加入邊距
resP@gsnPanelYWhiteSpacePercent = 2
resP@gsnPanelXWhiteSpacePercent = 2
這樣每幅小圖之間也會有點空隙,好看一些。
不一樣長的問題,我一開始猜測是沒有循環畫每個小圖而是一個一個畫的,結果不是;(此處省去若干搜索嘗試)……最后發現是因為第三個小圖的縱坐標小數位數比人家多,雖然最后一位都是零,就找到res@tmYLPrecision = 2.,設置精確到小數點后兩位,這個之前其實也嘗試過,不過報了許多warning,意思是要自行設置數據格式,格式說明有點眼花繚亂,於是當時就忽略這個方法了。這回硬出了圖,結果是對的,只是一屏的warning還是個遺留問題。
不一樣寬的問題,是我設置只有每行的第一列圖才顯示縱坐標說明,因為大家用得都是一樣的,后面列的兩個小圖由於沒有了說明,就自動最大化,比前面的寬了,只要把小圖設置的最大化關掉而保留panel的最大化設置就可以解決了。
res@gsnMaximize = False
resP@gsnMaximize = True
NCL的畫圖太強大了,好的強大是基本什么都能調,壞的強大是什么都得調……以后學高級了,可以做自己的畫圖object,把常用的這些設置都放進去……