#!/usr/bin/ruby # 使用するライブラリの読み込み. (以下 2 行は「決まり文句」.) require "numru/ggraph" include NumRu # NetCDF ファイルから東西風と南北風の変数を読み, GPhys オブジェクトに格納 gpu = GPhys::IO.open( "uwnd.10m.gauss.2005.nc", "uwnd" ) gpv = GPhys::IO.open( "vwnd.10m.gauss.2005.nc", "vwnd" ) #NetCDF ファイルから海面気圧の変数を読み、GPhysオブジェクトに格納 gp = GPhys::IO.open( "slp.2005.nc", "slp" ) gp = gp.cut( 'lon'=>-90..-30, 'lat'=>0..60 ) gpu = gpu.cut('lon'=>-90..-30, 'lat'=>0..60 ) gpv = gpv.cut('lon'=>-90..-30, 'lat'=>0..60 ) # 画面を開く (open) # 引数の 1 は画面への描画を表す # 2 はファイルへの出力を表す # (デフォルトでは出力は pdf 形式でファイル名は dcl.pdf) DCL.swpset("ifl",1) DCL.gropn(2) # 描画画面を準備 # itr の 1 は横軸, 縦軸ともに線形を表す # 2 は横軸が線形軸, 縦軸が対数軸を表す # 3 は横軸が対数軸, 縦軸が線形軸を表す # 4 は横軸, 縦軸ともに対数軸を表す GGraph.set_fig( 'itr'=> 1 ) # viewport は描画可能範囲の中での図の描画範囲を表す # (四隅 [x1,x2,y1,y2] の全体に対する比率) # window は描画する軸の範囲を表す (四隅 [x1,x2,y1,y2] の値) GGraph.set_fig( 'itr'=> 10, 'viewport'=>[0,0.6,0.2,0.9], 'window'=>[-90,-30,0,60] ) # 地図情報の指定. ここでは海岸線を描くように設定. GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) # for を使うことで, 2005 年 10 月 16 日, 17 日, 18 日, ... の六時間ごとの分布を描画 for i in 1..12 for j in 0..3 # 2005 年 10 月 16 日から 27 日までの六時間おきの日付の文字列を生成 # ruby では文字列を + で結合することができる # i は元々整数型変数. # + を使って結合するためには文字列でなければならないため, # to_s メソッド (s は string の略) を使って文字型変数に変換している. time_label = "2005-10-" + (i+15).to_s + " " + (j*6).to_s + ":00:0.0" # 繰り返し回数, 日付を画面に表示 print i, " : ", time_label, "\n" GGraph.tone( gp.cut('time'=>DateTime.parse(time_label)), true, 'annotate'=>true, 'map_axes'=>true, 'nlev'=>25, 'min'=>97000, 'max'=>102500 ) # ベクトルを描画 # 第一引数は描画するベクトルの x 成分の GPhys オブジェクト # 第二引数は描画するベクトルの y 成分の GPhys オブジェクト # 第三引数の true は新しい図 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 ) GGraph.color_bar end end # 画面を閉じる (close) DCL.grcls