#!/usr/bin/ruby # 使用するライブラリの読み込み require "numru/ggraph" include NumRu # NDFファイル"slp.2019.nc"から変数"slp"を取り出しGPhysオブジェクトgpに格納 gp = GPhys::IO.open( "slp.2019.nc", "slp" ) # NDFファイル"uwnd.10m.gauss.2019.nc"から変数"uwnd"を取り出しGPhysオブジェクトgpuに格納 gpu = GPhys::IO.open( "uwnd.10m.gauss.2019.nc", "uwnd" ) # NDFファイル"vwnd.10m.gauss.2019.nc"から変数"vwnd"を取り出しGPhysオブジェクトgpvに格納 gpv = GPhys::IO.open( "vwnd.10m.gauss.2019.nc", "vwnd" ) # GPhysオブジェクトgp内の変数"slp"からlon=120..180, lat=15..60を切り出す gp = gp.cut( 'lon'=>120..180, 'lat'=>15..60 ) # GPhysオブジェクトgpu内の変数"uwind"からlon=120..180, lat=15..60を切り出す gpu = gpu.cut( 'lon'=>120..180, 'lat'=>15..60 ) # GPhysオブジェクトgpv内の変数"vwind"からlon=120..180, lat=15..60を切り出す gpv = gpv.cut( 'lon'=>120..180, 'lat'=>15..60 ) # 描画した図をpngファイルとして保存 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'=>15 ) # x軸にラベルを書く間隔を15に設定 GGraph.set_axes( 'ylabelint'=>15 ) # y軸にラベルを書く間隔を15に設定 # 描画画面を準備 # 正距円筒図法で描画(itr) # 描画可能範囲の中での図の描画範囲を設定(viewport) # 描画する軸の範囲を設定(window) GGraph.set_fig( 'itr'=> 10, 'viewport'=>[0.1,0.9,0.2,0.55], 'window'=>[120,180,15,60] ) # 海岸線を描画 GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) # トーンの設定 # 98500から101725の間を75毎に区切る levels = [97500, 98500,98575,98650,98725,98800,98875,98950,99025,99100,99175,99250,99325,99400,99475,99550,99625,99700,99775,99850,99925,100000,100075,100150,100225,100300,100375,100450,100525,100600,100675,100750,100825,100900,100975,101050,101125,101200,101275,101350,101425,101500,101575,101650,101725] # 各階級の色を指定 patterns = [10999, 12999,14999,16999,18999,20999,22999,24999,26999,28999,30999,32999,34999,36999,38999,40999,42999,44999,46999,48999,50999,52999,54999,56999,58999,60999,62999,64999,66999,68999,70999,72999,74999,76999,78999,80999,82999,84999,86999,88999,90999,92999,94999,96999,98999] # 繰り返しの宣言 for i in 5..10 for j in [0, 6, 12, 18] # 2019年9月5日から10日まで, 6時間ごとの日時の文字列を生成 time_label = "2019-09-" + i.to_s + " " + j.to_s + ":00:0.0" # 繰り返し回数, 日付を画面に表示 print (i-5)*4+j/6+1, " : ", time_label, "\n" # トーンで描画 # GPhysオブジェクトgp内の変数"slp"からtime_labelを用いて切り出したデータを描画(第一引数) # 新しく図を描画(第二引数) # 図の右上に情報を表示(annotate) # 正距円筒図法における軸のラベルを表示(map_axes) # トーンの階級を"levels"に設定(lev) # トーンの色を"patterns"に設定(pat) GGraph.tone( gp.cut('time'=>DateTime.parse(time_label)), true, 'annotate'=>true, 'map_axes'=>true, 'lev'=>levels, 'pat'=>patterns) # カラーバーを描画 # 長さを0.27に調整(vlength) GGraph.color_bar( 'vlength'=>0.27 ) # ベクトルを描画 # GPhysオブジェクトgpu内の変数"uwind"からtime_labelを用いて切り出したデータを描画(第一引数) # GPhysオブジェクトgpv内の変数"vwind"からtime_labelを用いて切り出したデータを描画(第二引数) # 重ねて図を描画(第三引数) # x方向のデータの間隔を2に設定(xinv) # y方向のデータの間隔を2に設定(yinv) # ベクトルの長さを調節する係数を2に設定(factor) # 長さの基準となるベクトルを表示(unit_vect) 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 ) end end DCL.grcls