NCL-python 實作1 - XY plot (下篇)
經過上篇的4種實力練習後,這裡將進行最後的練習,並做一個總結。
結果如下:
第一行 : filename = Ngl.pynglpath("data") + "/asc/xy.asc"
是 PyNgl 內建進入 PyNGL system 的路徑,
print(Ngl.pynglpath("data")) 會顯示: /work1/ychuang/anaconda3/envs/pyn_env/lib/python3.6/site-packages/ngl/ncarg/data
xy.asc 則是安裝PyNgl 就一併安裝的ASCII檔案,檔案內容如下:
再來則是讀取ASCII檔案的指令,如下說明
重點說明 : 讀取ASCII檔案
data = Ngl.asciiread("檔案名稱",(行,列),"型態") or
array = Ngl.asciiread(filename, dims, type='_', sep=',')
filename 即檔案名稱,dims 為指定資料的維度,type則是資料型態,可為 'integer', 'float', or 'double' 。sep則可以指定分隔的判斷依據。
而最後回傳給array,是一個 "NumPy array of dims dimensions and of type type"。
後續則是進行陣列創建與賦值的動作,如下:
uv = np.zeros((2,129),'f') -> 透過Numpy創建2*129的浮點數0矩陣
uv[0,:] = data[:,1] -> 將讀取的ASCII資料傳遞給uv矩陣
uv[1,:] = data[:,2]
lon = data[:,0] -> 將讀取的ASCII資料傳遞給lon矩陣
lon = (lon-1) * 360./128. -> 做經度換算
最後則是進行繪圖的程序
重點說明 : "ti" 資源集
resources.tiMainString = " " resources.tiXAxisString = "longitude" resources.tiYAxisString = "m/s" resources.tiXAxisFontHeightF = 0.02 resources.tiYAxisFontHeightF = 0.02
"ti" 資源集可以加入標題(tiMainString)、X (tiXAxisString) 和 Y(tiYAxisString) 軸標記以及軸標記的粗細,如tiXAxisFontHeightF 和 tiYAxisFontHeightF。
重點說明 : "xy" 資源集
resources.xyLineColors = [107,24] resources.xyLineThicknessF = 2.0 resources.xyLabelMode = "Custom" resources.xyExplicitLabels = ["U","V"] resources.xyLineLabelFontHeightF = 0.02 resources.xyLineLabelFontColor = 2
"xyLineColors" 與 "xyLineThicknessF" 已經介紹過是進行線條顏色與粗細的控制。
"xyLabelMode " 當此處設定為 "Custom "時,代表您可以客製化自己要的標籤,而客製化的內容則是 "xyExplicitLabels" 中設定。
"xyLineLabelFontHeightF" 與 "xyLineLabelFontColor" 則是調整自設定標籤的大小與顏色。
重點說明 : 結束聲明
最後做一個結尾的控制,有些情況下這不是必要,但打上這些可以減少程式出錯的可能性。
del plot
del resources
Ngl.end()
"del" 可以移除掉一些物件,"Ngl.end() "則是將PyNgl進行關閉。
最後的最後,進行一下系統性的總結吧!
1. 宣告工作站 - 圖形輸出位置
wks_type = "x11" #或是ps,pdf...等
Ngl.open_wks("wks_type","名稱")
res = Ngl.Resources() #引入資源集
2. 資源控制1 - "ti" 資源集
tiXAxisString & tiYAxisString # 圖軸標籤文字
tiXAxisFontHeightF & tiYAxisFontHeightF # 圖軸標籤文字大小
tiMainString #圖形標題文字
tiMainFont #圖形標題文字字體
3. 資源控制2 - "xy" 資源集
xyLineColors & xyLineColor #線條顏色控制
xyLineThicknesses & xyLineThicknessF #線條粗細控制
xyMarkLineModes #mark 模式控制
xyMarkers #mark 樣式控制
xyLabelMode #標籤 模式控制
xyExplicitLabels #標籤 自定義內容
xyLineLabelFontHeightF #標籤 大小
xyLineLabelFontColor #標籤顏色
4. 圖形輸出
plot = Ngl.xy("工作站",變數1,變數2)
5. 結束宣告
del plot
del resources
Ngl.end()