NCL 小图对其问题
从昨天下午开始的折腾终于告一段落,虽然解决得不甚完善,只是图可以用了……
问题起自想把之前手动拼成的一页四张的图用脚本自动生成,这样一方面应该对得更齐一点,另一方面大大节省人工。
这本来应该是件很容易的事情,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,把常用的这些设置都放进去……