#!/usr/bin/ruby
# 使用するライブラリの読み込み. (以下 2 行は「決まり文句」.)
require "numru/ggraph"
include NumRu

# NetCDF ファイル "air.2019.nc" から変数 "air" を読み, GPhys オブジェクト gp に
# 格納
gp = GPhys::IO.open( "air.2019.nc", "air" )

# 画面を開く (open)
#   引数の 1 は画面への描画を表す
#          2 はファイルへの出力を表す
#            (デフォルトでは出力は pdf 形式でファイル名は dcl.pdf)
DCL.gropn(1)

# 描画に関わる各種の指定
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 は正距円筒図法 (いわゆる経度-緯度座標) を表す
#   viewport は描画可能範囲の中での図の描画範囲を表す
#            (四隅 [x1,x2,y1,y2] の全体に対する比率)
#   window は描画する軸の範囲を表す (四隅 [x1,x2,y1,y2] の値)
GGraph.set_fig( 'itr'=> 10, 'viewport'=>[0.1,0.9,0.2,0.55], 'window'=>[0,360,-90,90] )

# 地図情報の指定. ここでは海岸線を描くように設定.
GGraph.set_map( 'coast_world'=>true, 'grid'=>true )

# for を使うことで, 2019 年 1 月 1 日, 2 月 1 日, 3 月 1 日, ... の一か月ごとの分布を描画
for i in 1..12

  # 2019 年 1 月 1 日から 12 月 1 日までの一か月おきの日付の文字列を生成
  #   ruby では文字列を + で結合することができる
  #   i は元々整数型変数.
  #   + を使って結合するためには文字列でなければならないため,
  #   to_s メソッド (s は string の略) を使って文字型変数に変換している.
  time_label = "2019-" + i.to_s + "-01 00:00:0.0"

  # 繰り返し回数, 日付を画面に表示
  print i, " : ", time_label, "\n"

  # トーン (色付け) で描画
  #   第一引数は描画するデータの GPhys オブジェクト
  #   第二引数の true は新しい図であることの指定
  #   以下の指定の順番は問わない
  #   annotate は図の右上に書かれる情報の表示の有無の指定
  #   map_axes は正距円筒図法において軸のラベルを書くかどうかの指定
  #   nlev は使用するトーン (色分け) の数の指定
  #   min は描画するトーンの最小値の指定
  #   max は描画するトーンの最大値の指定
  #
  #   GPhys オブジェクト gp から time_label を用いて切り出していることに注意
  GGraph.tone( gp.cut('time'=>DateTime.parse(time_label)), true, 'annotate'=>true, 'map_axes'=>true, 'nlev'=>30, 'min'=>210, 'max'=>320 )
  # カラーバーを描画
  GGraph.color_bar

end

# 画面を閉じる (close)
DCL.grcls
