在作圖的時候最常更動的無非就是標題拉,範圍拉,座標軸拉,等值線密度拉,等等。範例 NCL101-7.ncl 將再多介紹一些常用的 Resources 的設定,雖然無法在一章中將「全部」的功能完整的示範一遍,但每多學幾個,就越能抓到NCL設計上的邏輯,多看一些範例越容易融會貫通或舉一反三,之後搜尋需要的某項設定時會更加的得心應手。
由於 script 越來越長,這章的內容又很雜,因此直接在下面的 script 中附帶文字說明。先看成果圖 (day5_example.pdf):
;===== NCL101-7.ncl =====
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
begin
; Work Station
wks_type = "pdf"
wks_type@wkPaperWidthF = 8.0
wks_type@wkPaperHeightF = 4.5
wks = gsn_open_wks(wks_type,"day5_example")
; Variable
ncFile = addfile("air.2014.nc","r")
Temp = ncFile->air(0,:,:,:)
; Plot resources
; 總共要畫兩張圖,需要兩個 resources, 分別為 res_cn 和 res_sd,
; 但因為很多一樣的設定,所以先設定 res,再令 res_cn = res 和 res_sd = res,
; 後面才把兩者不同的部分加上去,以簡化 code。
res = True
res@gsnDraw = False
res@gsnFrame = False
; @gsn 開頭的設定到此結束。可以發現這些設定都跟畫布架構有關,
; 而下面 @mp 開頭的設定跟 map 有關。
res@mpCenterLonF = 180.
res@mpMinLatF = 0.
res@mpMaxLatF = 80.
res@mpMinLonF = 60.
res@mpMaxLonF = 200.
; @ti 跟 title 有關。下面三行就是最常使用的標題和左/右字串設定方式。
res@tiMainString = "Title of Figure"
res@gsnLeftString = "Left String"
res@gsnRightString = "Right String"
; 通常經緯度不需要座標軸名稱,這邊硬加上去所以畫面看起來怪怪的,
; 但如果是非 map 類的圖,大部分的時候是要自己加座標軸名稱的。
res@tiXAxisString = "X-axis Name"
res@tiYAxisString = "Y-axis Name"
; Resources for contour plot
; 先把上面 res 中的設定傳給 res_cn。
res_cn = res
; 畫線但不要填滿 (contour)。
res_cn@cnFillOn = False
res_cn@cnLinesOn = True
; Line Labels 就是線上面顯示的數值,可以關掉。
res_cn@cnLineLabelsOn = True
; Information Label 是圖片右下角那行:CONTOUR FROM XXX TO XXX BY XXX,可以關掉。
res_cn@cnInfoLabelOn = True
; 如果要畫很多張圖比較,固定同一組等值線是必要的,
; 在 contour 中示範了 "ExplicitLevels",可以手動指定要畫哪些值,適用於非等間距的狀況。
res_cn@cnLevelSelectionMode = "ExplicitLevels"
res_cn@cnLevels = 235 + ispan(0,70,6)
; 改變線的顏色。另一個很像的設定是 @cnLineColors。
; 從 @cnLineColor 和 @cnLineColors 的差異可以體會到另一個NCL的設計邏輯!
; @cnLineColor 是指定一個顏色,全部的線都會換成這個單一顏色
; @cnLineColors 是指定一串顏色,需對應搭配的一串等值線值,以後有機會再介紹。
; 但從此以後,在使用 Resources 時就多花一秒留意一下有無 s,例如 @cnLinesOn。
res_cn@cnLineColor = "green"
; Resources for shading plot
res_sd = res
; 填滿就變成 shading 圖。
res_sd@cnFillOn = True
res_sd@cnLinesOn = False
; 如果選擇 "ManualLevels",那就簡單的指定最大、最小、和間距值。適用於等間距的情況。
res_sd@cnLevelSelectionMode = "ManualLevels"
res_sd@cnMaxLevelValF = 310
res_sd@cnMinLevelValF = 235
res_sd@cnLevelSpacingF = 3
; 將 colorbar 換成藍紅配,也可以選用其他NCL已事先設定好的組合,
; 也可以自創,自己指定一個一個的顏色,同樣以後有機會再介紹。
res_sd@cnFillPalette = "BlueRed"
; 跟 colorbar 有關的設定,以 @lb 開頭。
res_sd@lbOrientation = "vertical"
res_pn = True
res_pn@gsnMaximize = True
res_pn@gsnPaperOrientation = "portrait"
; 實用,但常忘記的功能:給一組拼圖圖組一個統一的標題。
; 它藏在 @tx,也就是文字 (text) 的類別底下,而不是 @ti (title) 喔!
res_pn@txString = "Title of Panel"
plot_pn = new(2,graphic)
plot_pn(0) = gsn_csm_contour_map_ce(wks,Temp(0,:,:),res_sd)
plot_pn(1) = gsn_csm_contour_map_ce(wks,Temp(0,:,:),res_cn)
gsn_panel(wks,plot_pn,(/1,2/),res_pn)
print("All Done.")
end
;=====
看完了這個範例,是否對於 NCL 給 Resources 的分類邏輯又更有感覺了呢?NCL 很貼心的把「所有」的 Resources 分門別類的以一類一整頁網頁的方式供使用者查詢。下次要找不知道的新功能時,也可以先猜它落在哪一個類別內,再到那個類別的網頁上用 search 功能尋找!
舉例一些常用的類別來說
@cn (contour):等值線
@gsn (gun high-level interfaces):進階設定
@lb (label bar):圖標
@mp (maps):地圖
@ti (title):標題
@tx (text):文字
@vc (vectors):向量
@wk (workstation):畫布
等等...
待續... Day 6
沒有留言:
張貼留言