#!/usr/bin/ruby #決まり文句 require "numru/ggraph" include NumRu #gtに一カ月平均温度の情報を格納 gt = GPhys::IO.open("air.mon.mean.nc","air") #gwに1カ月平均可降水量の情報を格納 gw = GPhys::IO.open("pr_wtr.mon.mean.nc","pr_wtr") #gsに1カ月平均海面気圧の情報を格納 gs = GPhys::IO.open("slp.mon.mean.nc","slp") #goに1カ月平均鉛直p速度の情報を格納 go = GPhys::IO.open("omega.mon.mean.nc","omega") #データ範囲を緯度経度ごとに制限 gt = gt.cut('lat'=>-10..10,'lon'=>120..300) gw = gw.cut('lat'=>-10..10,'lon'=>120..300) gs = gs.cut('lat'=>-10..10,'lon'=>120..300) go = go.cut('lat'=>-10..10,'lon'=>120..300) #データをカットして平年値として出力 gtav = gt.cut('time'=>DateTime.parse("1981-01-01 00:00:0.0")..DateTime.parse("2020-01-01 00:00:0.0")).mean('time') gwav = gw.cut('time'=>DateTime.parse("1981-01-01 00:00:0.0")..DateTime.parse("2020-01-01 00:00:0.0")).mean('time') gsav = gs.cut('time'=>DateTime.parse("1981-01-01 00:00:0.0")..DateTime.parse("2020-01-01 00:00:0.0")).mean('time') goav = go.cut('time'=>DateTime.parse("1981-01-01 00:00:0.0")..DateTime.parse("2020-01-01 00:00:0.0")).mean('time') #goとgoavを北緯5度から南緯5度まで平均 go = go.cut('lat'=>-5..5).mean('lat') goav = goav.cut('lat'=>-5..5).mean('lat') #ダウンロードコンテンツ # 制御文字を解釈しない DCL.sgpset('lcntl', false) # コーナーマークを書かない DCL.sgpset('lcorner',false) # コンター間隔非表示 DCL.udpset('lmsg',false) #ウィンドウを最大限使用 DCL.sgpset('lfull',true) #ファイルに出力 DCL.gropn(2) #欠損地処理 DCL.glpset('lmiss',true) #描画を軸内に収める DCL.sgpset('lclip',true) #フォントサイズを0.4倍に DCL.uzfact(0.4) # 画面分割 (描画順("y"oko/"t"ate),数:横,数:縦) DCL.sldiv("t",1,4) #iを整数として繰り返しの開始 for i in 1..9 #yを年として数値型のまま定義 y = 2010 + i #年平均を表すため、文字型で二つの時刻を定義 time1 = y.to_s + "-01-01 00:00:00" time2 = y.to_s + "-12-01 00:00:00" #地表面気圧の図の描画 #正距円筒図法で出力かつ描画範囲を設定 GGraph.set_fig('itr'=>10,'viewport'=>[0.05,0.95,0.02,0.12]) #海岸線を描くよう設定 GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) #x軸を非表示にし、y軸のみ表示 DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',false) #書き出し作業。cutでtime1~time2までを取り出し、平均(つまり年平均を作成)し、それと先ほど作成した平年値との差を取り出力。 #annotateで右上の文字が不要なので消し、map_axesで図に軸を表示する。また、nlevによって色区分は20に設定し、値の最大値と最小値をmax,minで定義した。 #タイトルは年平均がいつのものなのか表示するようにy.to_sを組み込んだ。 GGraph.tone(gt.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-gtav,true,'annotate'=>false,'map_axes'=>true,'nlev'=>20,'max'=>2,'min'=>-2,'title'=>"Annual Avereged Parameter's Deviation in "+y.to_s+" 1.Temp 2.PW 3.SLP 4.Omega" ) #等値線も同様に設定。ただし重ね書きの為falseを用い、間隔は0.2とした。 GGraph.contour(gt.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-gtav,false,"int"=>0.2) #カラーバーが少し大きめに感じたため、大きさを調節した。 GGraph.color_bar("vlength"=>0.1,"vwidth"=>0.01) #可降水量の図の描画 #正距円筒図法で出力かつ描画範囲を設定 GGraph.set_fig('itr'=>10,'viewport'=>[0.05,0.95,0.035,0.135]) #海岸線を描くよう設定 GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) #x軸を非表示にし、y軸のみ表示 DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',false) #書き出し作業。cutでtime1~time2までを取り出し、平均(つまり年平均を作成)し、それと先ほど作成した平年値との差を取り出力。 #annotateで右上の文字が不要なので消し、map_axesで図に軸を表示する。また、nlevによって色区分は20に設定し、値の最大値と最小値をmax,minで定義した。 #タイトルは年平均がいつのものなのか表示するようにy.to_sを組み込んだ。 GGraph.tone(gw.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-gwav,true,'annotate'=>false,'map_axes'=>true,'nlev'=>20,'max'=>8,'min'=>-8,'title'=>'') #等値線も同様に設定。ただし重ね書きの為falseを用い、間隔は0.8とした。 GGraph.contour(gw.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-gwav,false,"int"=>0.8) #カラーバーが少し大きめに感じたため、大きさを調節した。 GGraph.color_bar("vlength"=>0.1,"vwidth"=>0.01) #海面気圧の図の描画 #正距円筒図法で出力かつ描画範囲を設定 GGraph.set_fig('itr'=>10,'viewport'=>[0.05,0.95,0.045,0.145]) #海岸線を描くよう設定 GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) #x軸を非表示にし、y軸のみ表示 DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',false) #書き出し作業。cutでtime1~time2までを取り出し、平均(つまり年平均を作成)し、それと先ほど作成した平年値との差を取り出力。 #annotateで右上の文字が不要なので消し、map_axesで図に軸を表 DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',false)示する。また、nlevによって色区分は20に設定し、値の最大値と最小値をmax,minで定義した。 #タイトルは年平均がいつのものなのか表示するようにy.to_sを組み込んだ。 GGraph.tone(gs.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-gsav,true,'annotate'=>false,'map_axes'=>true,'nlev'=>20,'max'=>2,'min'=>-2,'title'=>'') #等値線も同様に設定。ただし重ね書きの為falseを用い、間隔は0.2とした。 GGraph.contour(gs.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-gsav,false,"int"=>0.2) #カラーバーが少し大きめに感じたため、大きさを調節した。 GGraph.color_bar("vlength"=>0.1,"vwidth"=>0.01) #鉛直速度の図の描画 #図法で出力かつ描画範囲を設定 GGraph.set_fig('itr'=>1,'viewport'=>[0.05,0.95,0.02,0.16]) #x軸、y軸共に表示 DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',true) #書き出し作業。cutでtime1~time2までを取り出し、平均(つまり年平均を作成)し、それと先ほど作成した平年値との差を取り出力。 #annotateで右上の文字が不要なので消し、map_axesで図に軸を表示する。また、nlevによって色区分は20に設定し、値の最大値と最小値をmax,minで定義した。 #タイトルは年平均がいつのものなのか表示するようにy.to_sを組み込んだ。 GGraph.tone(go.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-goav,true,'annotate'=>false,'map_axes'=>true,'nlev'=>20,'max'=>0.04,'min'=>-0.04,'title'=>'') #等値線も同様に設定。ただし重ね書きの為falseを用い、間隔は0.004とした。 GGraph.contour(go.cut('time'=>DateTime.parse(time1)..DateTime.parse(time2)).mean('time')-goav,false,"int"=>0.004) #カラーバーが少し大きめに感じたため、大きさを調節した。 GGraph.color_bar("vlength"=>0.1,"vwidth"=>0.01) #繰り返しの終了 end #図を終了する合図。 DCL.grcls