2015年3月11日

Day 5 常用的 Resources 類別介紹

在作圖的時候最常更動的無非就是標題拉,範圍拉,座標軸拉,等值線密度拉,等等。範例 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

沒有留言:

張貼留言