#!/usr/bin/ruby #使用するライブラリの読み込み(以下2行は「決まり文句」) require "numru/ggraph" include NumRu #NetCDFファイル"slp.2019.nc"から変数"slp"を読み,GPhysオブジェクトgpに格納 gp = GPhys::IO.open( "slp.2019.nc", "slp" ) #NetCDFファイル"uwnd.10m.gauss.2019.nc"から変数"uwnd"を読み,GPhysオブジェクトgpuに格納 gpu = GPhys::IO.open( "uwnd.10m.gauss.2019.nc", "uwnd" ) #NetCDFファイル"vwnd.10m.gauss.2019.nc"から変数"vwnd"を読み,GPhysオブジェクトgpvに格納 gpv = GPhys::IO.open( "vwnd.10m.gauss.2019.nc", "vwnd" ) #画像の出力 # 引数の2はpng形式での保存を表す DCL.swpset("ifl",1) DCL.gropn(2) #描画に関わる各種指定 DCL.sgpset('lfull',true) #描画範囲を最大に設定(ウィンドウのギリギリまで使用) DCL.uzfact(0.6) #フォントサイズ(元の値に対する比率を0.6に設定) DCL.sgpset('lclip',true) #軸範囲を超えた領域を描画しない DCL.glpset('lmiss',true) #欠損値処理 GGraph.set_axes('xlabelint'=>30) #x軸にラベルを書く間隔を30に設定 GGraph.set_axes('ylabelint'=>30) #y軸にラベルを書く間隔を30に設定 #描画画面を準備 # itrの10は正距円筒図法(いわゆる経度-緯度座標)を表す # viewportは描画可能範囲の中での図の描画範囲を表す(四隅[x1,x2,y1,y2]の全体に対する比率を[0.1,0.9,0.2,0.55]に設定) # windowは描画する軸の範囲を表す(四隅[x1,x2,y1,y2]の値を[105,180,0,60]に設定) GGraph.set_fig( 'itr'=> 10, 'viewport'=>[0.1,0.9,0.2,0.55], 'window'=>[105,180,0,60] ) #地図情報の指定. ここでは海岸線を描くように設定 GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) #forを使うことで, 2019年9月2日, 3日, ...の一日毎の分布を描画 for j in 2..12 #forを使うことで, 0時, 6時, ...の6時間毎の分布を描画 for i in 0..3 #2019年9月2日0時から12日18時までの6時間おきの日付の文字列を生成 # +により文字列を結合 # i, jは元々整数型変数. +を使って結合するには文字列でなければならないため, to_sメソッドを使って文字型変数に変換している time_label = "2019-09-" + j.to_s + " " + (6 * i).to_s + ":00:0.0" #日付を画面に表示 print time_label, "\n" #トーン(色付け)で描画 # 第一引数は描画するデータのGPhysオブジェクトgpからtime_labelを用いて切り出したもの # 第二引数のtrueは新しい図であることの指定 # 以下の指定の順番は問わない # titleは図の題名の指定('sea level pressure and 10m height wind velocity'に指定) # annotateは図の右上に書かれる情報を表示するかどうかの指定 # map_axesは正距円筒図法において軸のラベルを書くかどうかの指定 # nlevは使用するトーン(色分け)の数の指定(30に設定) # minは描画するトーンの最小値の指定(97000Paに設定) # maxは描画するトーンの最大値の指定(103000Paに設定) GGraph.tone( gp.cut('time'=>DateTime.parse(time_label)), true, 'title'=>'sea level pressure and 10m height wind velocity', 'annotate'=>true, 'map_axes'=>true, 'nlev'=>30, 'min'=>97000, 'max'=>103000 ) #ベクトルを描画 # 第一引数は描画するベクトルのx成分のGPhysオブジェクト # 第二引数は描画するベクトルのy成分のGPhysオブジェクト # 第三引数のfalseは最初の図に追記することの指定 # xintv, yintvはそれぞれx, y方向のデータの間隔 # factorはベクトルの長さの指定 # unit_vectは図に描かれているベクトルの長さを示す「標本」を描くかどうかの指定 # keepは直前の図と同様のベクトルスケーリングを使用するかどうかの指定 GGraph.vector( gpu.cut('time'=>DateTime.parse(time_label)), gpv.cut('time'=>DateTime.parse(time_label)), false, "xintv"=>2, "yintv"=>2, "factor"=>2, "unit_vect"=>true, "keep"=>true ) #カラーバーを描画 GGraph.color_bar #繰り返し(iについて)の終点 end #繰り返し(jについて)の終点 end #画面を閉じる(close) DCL.grcls