国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

NCL 語(yǔ)言中圖形繪制基本概念辨析

2021-03-23 06:37李玉鵬高夢(mèng)竹曲驊倩
關(guān)鍵詞:畫紙調(diào)用畫板

李玉鵬 李 吉* 高夢(mèng)竹 曲驊倩

(1、長(zhǎng)白山氣象與氣候變化吉林省重點(diǎn)實(shí)驗(yàn)室,吉林 長(zhǎng)春130062 2、吉林省氣象科學(xué)研究所,吉林 長(zhǎng)春130062 3、伊通滿族自治縣氣象局,吉林 四平130700 4、成都信息工程大學(xué),四川 成都610200 5、黑龍江省氣象臺(tái),黑龍江 哈爾濱150001 6、桓仁滿族自治縣氣象局,遼寧 本溪117200)

NCL 是一種專門為大氣科學(xué)專業(yè)數(shù)據(jù)處理以及圖形繪制而開發(fā)的編程語(yǔ)言,其在氣象領(lǐng)域的應(yīng)用在國(guó)內(nèi)外十分廣泛[1,2]。NCL 支持豐富的數(shù)據(jù)類型,如NetCDF 3/4、GRIB 1/2、HDF 4/5、HDF-EOS 2/5、shapefile、ASCII 以及二進(jìn)制文件,而且對(duì)數(shù)據(jù)接口進(jìn)行了封裝,使得讀取不同數(shù)據(jù)格式都十分方便。NCL有令人喜愛的數(shù)據(jù)可視化能力,默認(rèn)參數(shù)下輸出的圖形質(zhì)量已經(jīng)十分出色,國(guó)內(nèi)外眾多氣象相關(guān)的期刊上的圖形很多都由NCL 繪制。除了在圖形繪制方面的優(yōu)勢(shì)外,NCL 還內(nèi)建了許多氣象專業(yè)常用的公式和函數(shù),可以方便使用者直接調(diào)用,另外,NCL 支持眾多的投影和網(wǎng)格類型,因此也可以對(duì)眾多模式結(jié)果進(jìn)行后處理和可視化[3,4]。

NCL 雖然有著優(yōu)秀的數(shù)據(jù)處理和高品質(zhì)圖形繪制能力,但其語(yǔ)言設(shè)計(jì)方面和Matlab、Grads 等其他氣象常用編程語(yǔ)言有著較大的差異,其特有的以@為標(biāo)志的面向?qū)ο蟮膶傩栽O(shè)置更讓眾多初學(xué)者都感到不適。

而在數(shù)據(jù)可視過(guò)程中,draw、frame、gsnDraw、gsnFrame 這幾個(gè)語(yǔ)句是十分重要也是十分常見的,但往往不易理解。因此本文主要對(duì)以上這些語(yǔ)句以及背景概念進(jìn)行詳細(xì)分析。

1 理解draw 與frame 過(guò)程

下面來(lái)詳細(xì)地分析draw 和frame 的區(qū)別。首先draw(plot),括號(hào)內(nèi)還可以是數(shù)組,這個(gè)“過(guò)程”即procedure,相當(dāng)于執(zhí)行“繪制”,繪制不是直接地繪制到png、pdf 等圖形中,而是繪制在workstation 中,這一過(guò)程就像執(zhí)行了一個(gè)動(dòng)作,當(dāng)然這個(gè)動(dòng)作的對(duì)象必須是view object(可理解為圖形對(duì)象),view object 可以通過(guò)gsn 方式或者create 方式產(chǎn)生。frame (wks) 也是一個(gè)procedure,它的參數(shù)同樣也可以是一個(gè)數(shù)組,它所做的就是先對(duì)workstation 中的圖形對(duì)象進(jìn)行更新,然后再清空。同樣workstation 對(duì)象除了通過(guò)gsn_open_wks 產(chǎn)生,也同樣可以由create 方式生成。通俗一點(diǎn)說(shuō)就是:每調(diào)用frame(wks)一次,都會(huì)產(chǎn)生一個(gè)畫板,如果之前draw(plot)了,那么畫板上就會(huì)有plot的圖,如果前面沒(méi)有draw 任何plot,那么產(chǎn)生的畫板就是空白的,表現(xiàn)在(e)ps 或pdf 文件中就是空白頁(yè)。

所以,當(dāng)完成完整的一組繪制時(shí)再進(jìn)行frame,而且如果緊接著沒(méi)有新的draw 動(dòng)作,馬上再frame,新產(chǎn)生的畫板也是空白的,并不會(huì)產(chǎn)生之前圖形的副本,即frame 一次清空一次wks 中的圖形對(duì)象。如果從頭到尾一直都沒(méi)frame,那么最后也還會(huì)frame 的,因?yàn)橹灰闪藈orkstation,腳本結(jié)束時(shí)會(huì)自動(dòng)有一次frame。同樣,如果沒(méi)有draw 過(guò)任何東西,這張畫板就是空白的(以上這些討論都是基于gsnDraw 和gsnFrame 屬性都是False的情形)。gsnDraw 屬性表示是否在調(diào)用gsn function 或者procedure 時(shí)順便執(zhí)行draw 命令。gsnFrame 表示是否在調(diào)用gsn function 或者procedure 時(shí)順便執(zhí)行frame 命令。如果所需繪制的圖形中包含不同場(chǎng)的疊加等較為復(fù)雜的操作時(shí),這時(shí)往往要執(zhí)行不止一條gsn 命令,這兩個(gè)屬性一般都設(shè)成False。所以一般當(dāng)要產(chǎn)生和操作的圖形對(duì)象比較多時(shí),gsnDraw 和gsnFrame 最好還是關(guān)掉,采用顯示手動(dòng)的方式控制整個(gè)繪圖流程。

2 gsn 繪圖function 和procedure 的區(qū)別

function 有返回值,調(diào)用時(shí)前邊必須要有一個(gè)變量來(lái)接收這一返回值。而且其作用效果是跟隨圖形對(duì)象的。如果把gsnFrame 和gsnDraw 設(shè)成了False,那么必須執(zhí)行draw(wks),然后這個(gè)function 產(chǎn)生的圖才會(huì)被打印到畫板上。以gsn_add_text這個(gè)function 為例,draw (plot) 之后再執(zhí)行該function,然后再frame 是沒(méi)有效果的,因?yàn)楦街形淖中畔⒌膒lot 根本沒(méi)有被draw 過(guò)。如果一直執(zhí)行draw 動(dòng)作而后面不跟隨frame,所有圖都會(huì)被放到同一個(gè)頁(yè)面中,當(dāng)frame 時(shí)會(huì)一起出現(xiàn)在畫板上,當(dāng)然如果你一直draw 的是一個(gè)圖形對(duì)象的話,你可能看不出來(lái)是多個(gè)對(duì)象,因?yàn)檫@些對(duì)象正好完全重疊在一起了,只能看到最上面的。

procedure 無(wú)返回值,不能賦值給變量。而且這一動(dòng)作可以自行完成,不需要后續(xù)的draw 跟隨。procedure 執(zhí)行的結(jié)果不附著于其操作的圖形對(duì)象,也可以說(shuō)它是和圖形對(duì)象分離的另一個(gè)過(guò)程(雖然中間可能會(huì)用到view object 對(duì)象,主要用來(lái)作為繪圖位置等信息的參考),所以當(dāng)圖形對(duì)象又經(jīng)歷了放大(gsnMaximize)、覆蓋(overlay)之類的操作后,procedure 之前的結(jié)果不會(huì)被更新,所以,就可能會(huì)出現(xiàn)procedure 的繪制結(jié)果錯(cuò)位或者消失(被覆蓋)。

通過(guò)下邊這段代碼及其執(zhí)行結(jié)果可以幫助我們更準(zhǔn)確地理解上述內(nèi)容。

圖1 代碼的執(zhí)行結(jié)果

其執(zhí)行的結(jié)果如圖1 所示,結(jié)合圖和代碼不難發(fā)現(xiàn):如果只關(guān)注大寫字母的順序,它們的圖層順序由底到頂依次為C->A->B->D,從而我們不難分析得到:與frame 不同,draw 重復(fù)使用時(shí)不會(huì)清空之前結(jié)果;procedure 生成時(shí)也需要借助于plot 對(duì)象,但draw 的時(shí)候只draw 自身圖形,與plot 相分離,本身自帶draw 功能,不帶frame 功能;function 跟隨、附著于plot 對(duì)象,但自身無(wú)draw 和frame 功能;只要生成了一個(gè)wks,即使gsnFrame 設(shè)置為False,程序結(jié)束時(shí)仍會(huì)自帶一個(gè)frame(wks)。

最后用一系列類比來(lái)加強(qiáng)對(duì)上面論述的理解,當(dāng)gsnDraw和gsnFrame 都設(shè)置為False 時(shí),這時(shí)是手動(dòng)控制繪圖流程,具有更大的自由度和靈活性,當(dāng)需要繪制復(fù)雜的圖形時(shí),往往需要采用這種設(shè)置。gsn_open_wks 函數(shù)表示繪畫開始,主要作用是提供繪畫的畫本,會(huì)根據(jù)后期的繪畫需要進(jìn)行紙張供給。gsn 繪圖函數(shù)的作用可以類比于篆刻圖形印章的過(guò)程,其繪制內(nèi)容最初是保存在模子上的,只有當(dāng)執(zhí)行“蓋章”(draw)這一動(dòng)作時(shí),圖形才會(huì)被印在畫紙上。而gsn 繪圖過(guò)程的作用可以類比于直接在畫紙上作畫,沒(méi)有中間過(guò)程,其繪制內(nèi)容直接出現(xiàn)在當(dāng)前的畫紙上。而frame 這個(gè)過(guò)程則相當(dāng)于將當(dāng)前作畫的畫紙從繪畫本子上取下來(lái)并放到作品集中,而這個(gè)作品集就是我們程序運(yùn)行的最終輸出結(jié)果,也就是我們看到的pdf 文件(單頁(yè)或是多頁(yè)),或者png(一張或多張)等圖形。

3 結(jié)論

以上較為詳細(xì)地介紹了NCL 在圖形繪制過(guò)程中可能遇到的一些基本概念問(wèn)題。

3.1 詳細(xì)介紹了draw 和frame 過(guò)程(procedure)的區(qū)別和用法。

3.2 詳細(xì)辨析了gsn 繪圖過(guò)程與函數(shù)的區(qū)別和用法。

3.3 在繪制復(fù)雜圖形時(shí),要將gsnDraw 和gsnFrame 屬性設(shè)為False,這樣可以更自由地控制繪圖順序和顯示效果。

猜你喜歡
畫紙調(diào)用畫板
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
系統(tǒng)虛擬化環(huán)境下客戶機(jī)系統(tǒng)調(diào)用信息捕獲與分析①
石頭草莓
把手掌放在畫紙上描一描,畫出一只幽靈吧
把手掌放在畫紙上描一描,畫出一只企鵝吧
七彩畫板
七彩畫板
七彩畫板
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
C++語(yǔ)言中函數(shù)參數(shù)傳遞方式剖析