• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    NCL 語言中圖形繪制基本概念辨析

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

    李玉鵬 李 吉* 高夢竹 曲驊倩

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

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

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

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

    1 理解draw 與frame 過程

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

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

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

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

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

    通過下邊這段代碼及其執(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ù)使用時不會清空之前結(jié)果;procedure 生成時也需要借助于plot 對象,但draw 的時候只draw 自身圖形,與plot 相分離,本身自帶draw 功能,不帶frame 功能;function 跟隨、附著于plot 對象,但自身無draw 和frame 功能;只要生成了一個wks,即使gsnFrame 設(shè)置為False,程序結(jié)束時仍會自帶一個frame(wks)。

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

    3 結(jié)論

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

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

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

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

    猜你喜歡
    畫紙畫板調(diào)用
    核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    畫紙上的家
    把手掌放在畫紙上描一描,畫出一只幽靈吧
    把手掌放在畫紙上描一描,畫出一只企鵝吧
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    七彩畫板
    七彩畫板
    七彩畫板
    一條線畫到底
    肥西县| 台中县| 吐鲁番市| 封丘县| 广汉市| 富平县| 阜新| 藁城市| 嵊州市| 合肥市| 银川市| 昌平区| 林甸县| 岱山县| 溧水县| 金湖县| 克山县| 乐亭县| 大同市| 无极县| 吉木萨尔县| 井陉县| 宜良县| 隆回县| 蓝山县| 石城县| 达拉特旗| 石楼县| 南华县| 尤溪县| 应用必备| 东乡族自治县| 色达县| 长乐市| 区。| 天镇县| 湛江市| 五大连池市| 郓城县| 阿勒泰市| 阿拉善右旗|