#!/usr/bin/ruby # coding: utf-8 #使用するライブラリの読み込み. require "numru/ggraph" include NumRu # NetCDF ファイル "air.2018.nc" から変数 "air" を読み, GPhys オブジェクト tmp に格納 tmp = GPhys::IO.open("air.2018.nc","air") # NetCDF ファイル "uwnd.2018.nc" から変数 "uwnd" を読み, GPhys オブジェクト gpu に格納 gpu = GPhys::IO.open("uwnd.2018.nc", "uwnd") # NetCDF ファイル "vwnd.2018.nc" から変数 "vwnd" を読み, GPhys オブジェクト gpv に格納 gpv = GPhys::IO.open("vwnd.2018.nc", "vwnd") #使用するデータの指定 #それぞれ経度:120~160度,緯度:10-60度,高度250mbarのデータを切出し tmp = tmp.cut('lon'=>120..160, 'lat'=>10..60, 'level'=> 250 ) gpu = gpu.cut('lon'=>120..160, 'lat'=>10..60, 'level'=> 250 ) gpv = gpv.cut('lon'=>120..160, 'lat'=>10..60,'level'=> 250 ) #図をpngファイルとして保存 DCL.swpset("ifl",1) DCL.gropn(2) DCL.sgpset('lfull',true) #描画範囲を最大に設定 DCL.uzfact(0.6) #フォントサイズの設定 DCL.glpset('lmiss',true) #欠損値処理 #図を正距円筒図法で描画 GGraph.set_fig('itr'=>10,'viewport'=>[0.1,0.85,0.2,0.55]) # 地図情報の指定. ここでは海岸線を描くように設定 GGraph.set_map('coast_world'=>true,'grid'=>true) # for(i)により,2018年9月1日,2日,..5日の図を描画 for i in 1..5 # for(j)により,それぞれの日の6時間毎の図を描画 for j in 0..3 # 2018 年9月1日から,9月5日までの6時間毎の日時の文字列を生成 time_label = "2018-09-" + i.to_s + " " + (j*6).to_s + ":00:0.0" #グラフを色づけ(トーン)と等値線で描画 # 第一引数は描画するデータの GPhys オブジェクト(.cutでそれぞれの時間を切り出している) # 第二引数の true は新しい図であることの指定 # map_axes は正距円筒図法において軸のラベルを書くかどうかの指定 # nlev で使用するトーン (色分け) の数を20に指定 # min で描画するトーンの最小値を215Kに指定 # max で描画するトーンの最大値を241Kに指定 GGraph.tone_and_contour(tmp.cut('time'=>DateTime.parse(time_label)),true,'map_axes'=>true, 'nlev'=>20, 'min'=>215, 'max'=>241) # 風をベクトルで描画 # 第一引数は描画するベクトルの x 成分の GPhys オブジェクトgpu(.cutでそれぞれの時間を切り出している) # 第二引数は描画するベクトルの y 成分の GPhys オブジェクトgpv(.cutでそれぞれの時間を切り出している) # 第三引数の 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"=>1,"yintv"=>1,"factor"=>1,"unit_vect"=>true,'keep'=>true) GGraph.color_bar #カラーバーを表示 end end #画面を閉じる. DCL.grcls