#!/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" ) # cut メソッドを使って経度, 緯度の範囲を切り出す gp = gp.cut( 'lon'=>120..180, 'lat'=>0..60 ) # 画面を開く (open) DCL.swpset( "ifl", 1 ) # png 形式で出力する指定 DCL.gropn(2) # ファイルへの出力を指定 # 描画に関わる各種の指定 DCL.sgpset( 'lfull', true ) # 描画範囲を最大に設定 (ウィンドウのギリギリまで使用) DCL.uzfact( 0.6 ) # フォントサイズ (元の値に対する比率) DCL.sgpset( 'lclip', true ) # 軸範囲を超えた領域を描画しない DCL.glpset( 'lmiss', true ) # 欠損値処理 GGraph.set_axes( 'xlabelint'=>30 ) # x 軸にラベルを書く間隔 GGraph.set_axes( 'ylabelint'=>30 ) # y 軸にラベルを書く間隔 # 描画画面を準備 # itr の 10 は正距円筒図法 ( 経度-緯度座標 ) を表す # viewport は描画可能範囲の中での図の描画範囲を表す ( 四隅 [x1,x2,y1,y2] 全体に対する比率 ) # window は描画する軸の範囲を表す ( 四隅 [x1,x2,y1,y2] の値 ) GGraph.set_fig( 'itr'=> 10, 'viewport'=>[0.1,0.9,0.2,0.55], 'window'=>[120,180,0,60] ) # 地図情報の指定 ( 海岸線を描くように設定 ) GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) # for を使うことで, 2019 年 9 月 5 日 00:00:00 から 9 月 15 日 18:00:00 までの 6 時間ごとの分布を描画 for j in 5..15 # j = 5 で繰り返しを開始し, j = 15 で終了 for i in 0..3 # i = 0 で繰り返しを開始し, i = 3 で終了 # 2019 年 9 月 5 日 00:00:00 から 9 月 15 日 18:00:00 までの 6 時間おきの日付の文字列を生成 time_label = "2019-9-" + j.to_s + " " + (6*i).to_s + ":00:0.0" # 日付を画面に表示 print time_label, "\n" # トーン (色付け) で描画 # 第一引数は描画するデータの GPhys オブジェクト # 第二引数の true は新しい図であることの指定 # annotate は図の右上に書かれる情報の表示の有無の指定 # map_axes は正距円筒図法において軸のラベルを書くかどうかの指定 # nlev は使用するトーン (色分け) の数の指定 # min は描画するトーンの最小値の指定 # max は描画するトーンの最大値の指定 GGraph.tone( gp.cut('time'=>DateTime.parse(time_label)), true, 'annotate'=>true, 'map_axes'=>true, 'nlev'=>30, 'min'=>94800, 'max'=>103200 ) # カラーバーを描画 # left はカラーバーを左側に表示する指定 GGraph.color_bar( 'left'=>true ) # ベクトルを描画 # 第一引数は描画するベクトルの x 成分の GPhys オブジェクト # 第二引数は描画するベクトルの y 成分の GPhys オブジェクト # 第三引数の false は重ね書きするための指定 # keep はベクトルの大きさの基準を統一するための指定 # len_unit はベクトルの基準の大きさの指定 # xintv は x 方向のデータの間隔の指定 # yintv は y 方向のデータの間隔の指定 # factor はベクトルの長さを調節する係数の指定 # unit_vect はベクトルの長さを示す標本を描くための指定 GGraph.vector( gpu.cut('time'=>DateTime.parse(time_label)), gpv.cut('time'=>DateTime.parse(time_label)), false, "keep"=>true ,"len_unit"=>20, "xintv"=>2, "yintv"=>2, 'factor'=>4, "unit_vect"=>true ) end end # 画面を閉じる (close) DCL.grcls