#!/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 ファイルから東西風と南北風の変数を読み, GPhys オブジェクトに格 納 gpu = GPhys::IO.open( "uwnd.10m.gauss.2019.nc", "uwnd" ) gpv = GPhys::IO.open( "vwnd.10m.gauss.2019.nc", "vwnd" ) #画面を開く # 引数の1は画面への描画を表す #    2はファイルへの出力を表す # (デフォルトでは出力はpdf形式でファイル名はdcl.pdf) DCL.swpset("ifl" ,1) 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 の 1 は横軸, 縦軸ともに線形を表す # 2 は横軸が線形軸, 縦軸が対数軸を表す # 3 は横軸が対数軸, 縦軸が線形軸を表す # 4 は横軸, 縦軸ともに対数軸を表す # 10 は正距円筒図法 (いわゆる経度-緯度座標) を表す GGraph.set_fig( 'itr'=> 10) # 地図情報の指定. ここでは海岸線を描くように設定. GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) # for を使うことで, 2019 年 9 月 3 日から 9 月 12 日, ... の一か 月ごとの分布を>描画 # forを使うことで、0時から18時の一時間ごとの分布を描画 for i in 3..12 for j in 0..18 # j を 6 で割った余りが0のときを場合分け(6時間おきのデータを表示) # 2019 年 9 月 3 日から 9 月 12 日までの # 0時から18時までの1時間おきの時間の文字列を生成 # ruby では文字列を + で結合することができる # i は元々整数型変数. # + を使って結合するためには文字列でなければならないため, # to_s メソッド (s は string の略) を使って文字型変数に変換している. if j%6 == 0 then timelabel = "2019-09-" + i.to_s + " " + j.to_s + " :00:00" # 繰り返し回数, 日付を画面に表示 print i, " : ", timelabel, "\n" # トーン (色付け) で描画 # 第一引数は描画するデータの GPhys オブジェクト # 第二引数の true は新しい図であることの指定 # 以下の指定の順番は問わない # annotate は図の右上に書かれる情報の表示の有無の指定 # map_axes は正距円筒図法において軸のラベルを書くかどうかの指定 # nlev は使用するトーン (色分け) の数の指定 # min は描画するトーンの最小値の指定 # max は描画するトーンの最大値の指定 # GPhys オブジェクト gp から time_label を用いて切り出していることに注意 GGraph.tone( gp.cut('lon'=>120..180,'lat'=>0..60,'time'=>DateTime.parse(timelabel)), true, 'annotate'=>true, 'map_axes'=>true, 'nlev'=>90, 'min'=>97000, 'max'=>103000) # カラーバーを描画 GGraph.color_bar('tickintv'=>0 ) # ベクトルを描画 # 第一引数は描画するベクトルの x 成分の GPhys オブジェクト # 第二引数は描画するベクトルの y 成分の GPhys オブジェクト # 第三引数の true は新しい図を表す GGraph.vector( gpu.cut('time'=>DateTime.parse(timelabel)), gpv.cut('time'=>DateTime.parse(timelabel)), false, "xintv"=>2, "yintv"=>2, "factor"=>6, "unit_vect"=>false ) #ifの終わり end #forの終わり end end # 画面を閉じる (close) DCL.grcls