#!/usr/bin/ruby # 使用するライブラリの読み込み. (以下 2 行は「決まり文句」.) require "numru/ggraph" include NumRu # NetCDF ファイル "air.2020.nc" から変数 "air" を読み, GPhys オブジェクト gp に # 格納 gp = GPhys::IO.open( "air.2020.nc", "air" ) # 画面を開く (open) #引数の 1 は画面への描画を表す # 2 はファイルへの出力を表す # (デフォルトでは出力は pdf 形式でファイル名は dcl.pdf) DCL.swpset("ifl",1) DCL.gropn(2) # 描画に関わる各種の指定 DCL.uzfact(0.6) # フォントサイズ (元の値に対する比率) DCL.sgpset('lclip',true) # 軸範囲を超えた領域を描画しない DCL.glpset('lmiss',true) # 欠損値処理 GGraph.set_axes('xlabelint'=>1) # x軸にラベルを書く範囲 GGraph.set_axes('ylabelint'=>1) # y軸にラベルを書く範囲 # 描画画面を準備 # itr の 1 は横軸, 縦軸ともに線形を表す # 2 は横軸が線形軸, 縦軸が対数軸を表す # 3 は横軸が対数軸, 縦軸が線形軸を表す # 4 は横軸, 縦軸ともに対数軸を表す # 10 は正距円筒図法 (いわゆる経度-緯度座標) を表す # viewport は描画可能範囲の中での図の描画範囲を表す # (四隅 [x1,x2,y1,y2] の全体に対する比率) # window は描画する軸の範囲を表す (四隅 [x1,x2,y1,y2] の値)、ここで神戸市の範囲を指定 GGraph.set_fig( 'itr'=>10, 'viewport'=>[0.2,0.75,0.2,0.75], 'window'=>[133,137,33,37] ) # 地図情報の指定. ここでは海岸線を描くように設定. GGraph.set_map( 'coast_world'=>true, 'grid'=>true ) # for を使うことで, 2020年1月,2月,3月,…の一か月ごとの分布を描画 for i in 1..12 # 2020年1月から12月までの一か月おきの日付の文字列を生成 # ruby では文字列を + で結合することができる # i は元々整数型変数. # + を使って結合するためには文字列でなければならないため, # to_s メソッド (s は string の略) を使って文字型変数に変換している. time_label = "2020-" + i.to_s # 繰り返し回数, 日付を画面に表示 print i, ":", time_label, "\n" # 月初を設定する sdate = "2020-" + i.to_s + "-01 00:00:0.0" # 月末を設定する case i when 1, 3, 5, 7, 8, 10, 12 then # 大の月 edate = "2020-" + i.to_s + "-31 23:59:9.9" when 4, 6, 9, 11 then # 小の月 edate = "2020-" + i.to_s + "-30 23:59:9.9" when 2 then # 2月(うるう年の判定はしていない) edate = "2020-" + i.to_s + "-29 23:59:9.9" end # 時間(time)に対して平均をとる gpwork = gp.cut('time'=>DateTime.parse(sdate)..DateTime.parse(edate)).mean('time') # トーン (色付け) で描画 # 第一引数は描画するデータの GPhys オブジェクト # 第二引数の true は新しい図であることの指定 # 以下の指定の順番は問わない # annotate は図の右上に書かれる情報の表示の有無の指定 # nlev は使用するトーン (色分け) の数の指定 GGraph.tone( gpwork, true, 'title'=>"Monthly Mean Zonal Temperature at Kobe", 'annotate'=>true, 'map_axes'=>true, 'nlev'=>40, 'min'=>270, 'max'=>310 ) # カラーバーを描画 GGraph.color_bar #日付を画像上に描画 DCL.uxsttl( 't', "2020-" + i.to_s, 1 ) #等値線を描画 GGraph.contour( gpwork, false ,'interval'=>5 ) end # 画面を閉じる (close) DCL.grcls