[更新情報]

▽Go to footer

GMT で時系列グラフを描く事例です.「10年間の平均気温と降水量のグラフ」および「1年間の流量と流況のグラフ」を作成してみました. 気温と降水量のデータは気象庁のホームページ,流量データは国土交通省のホームページよりダウンロードしたものを加工して用いています.

「10年間の平均気温と降水量のグラフ」では W 軸(左縦軸)を気温,E 軸(右縦軸)を降水量とした図を重ね合わせで描いています.

「1年間の流量と流況のグラフ」では,バッチファイルの中で gawk の printf を使うのに苦労しました.試行錯誤の結果,「¥"」や「%%」を使ってうまく処理することができました. またこのグラフでは,お遊びで流況表のようなもの(豊平低渇の流量の羅列)もつけてみました.

いずれの図も GMT で ps ファイルとして出力していますが,これらを ImageMagick で png 画像にして掲載しています.ImageMagick のコマンドは以下のものです. ps を png にしながら 90 度回転させています.

mogrify -rotate 90 -trim -density 300 -bordercolor "#ffffff" -border 50x50 -format png *.ps

実行用バッチファイルと解説

rem ============================
rem 時経列グラフ表示
rem ============================
set fig_out=fig_BOT_1.ps
gmtset PLOT_DATE_FORMAT o 
gmtset TIME_FORMAT_PRIMARY abbreviated
gmtset INPUT_DATE_FORMAT yyyy/mm/dd
gmtset ANNOT_FONT_SIZE_PRIMARY 7
gmtset ANNOT_FONT_SIZE_SECONDARY 14
gmtset LABEL_FONT_SIZE 14
gmtset HEADER_FONT_SIZE 20
rem ---------------------------------------
rem 凡例用バッチファイル作成
gawk -f awk_klegend.awk inp_legend_BOT_1.txt > legend1.bat
rem ---------------------------------------
psbasemap -R1999-01-01T/2010-01-01T/-10/40 -JX20/10 -Gbeige -U"%fig_out%" -Bsa1Yg1Y/S -Bpa3Of1o/S:."Temperature and Rainfall in Maebashi": -K > %fig_out%
gawk "BEGIN{FS=\",\"}{if(2<=NR)print $1,$2}" inp_WC_maebashi.txt | psxy -R -J -Bs/a10f5g10:"Temperature (@%%12%%\260@%%%%C)":W -W5,red -O -K >> %fig_out%
gawk "BEGIN{FS=\",\"}{if(2<=NR)print $1,$5}" inp_WC_maebashi.txt | psxy -R1999-01-01T/2010-01-01T/0/500 -J -Gblue -Sb10u -Bs/a100f50:"Rainfall (mm)":E -O -K >> %fig_out%
call legend1.bat
rem **************************************************************************
rem * gmtset PLOT_DATE_FORMAT o               月を名前で表示
rem * gmtset TIME_FORMAT_PRIMARY abbreviated  月の名前を省略形で表示
rem * gmtset TIME_FORMAT_PRIMARY Charcter     月の名前を頭文字で表示
rem * gmtset INPUT_DATE_FORMAT yyyy/mm/dd     入力データ年月日フォーマット指定
rem * gmtset ANNOT_FONT_SIZE_PRIMARY 7        第1軸(月)のフォントサイズ
rem * gmtset ANNOT_FONT_SIZE_SECONDARY 14     第2軸(年)のフォントサイズ
rem * gmtset LABEL_FONT_SIZE 14               軸ラベルのフォントサイズ
rem * gmtset HEADER_FONT_SIZE 20              タイトルのフォントサイズ
rem * psbasemap                               プロットするベースを出力
rem *     -R1999-01-01T/2010-01-01T/-10/40    プロット範囲
rem *              横軸:1999年元旦から2010元旦,
rem *              縦軸:気温描画のため範囲を-10〜40に設定
rem *     -JX20/10       プロット範囲を横軸長20cm,縦軸長10cmに設定
rem *     -Gbeige        プロット範囲をベージュで塗りつぶす
rem *     -U"%fig_out"   タイプスタンプにファイル名を追加して描画
rem *     -Bsa1Yg1Y/S    [s]は第二目盛(年を描画)を示す.[a1Yg1Y]横軸指定.
rem *                    4桁の年を1年間隔で表示し線を入れる.
rem *                    縦軸は指定せず,(S)南に軸を描画.
rem *     -Bpa3Of1o/S    [p]は第一目盛(月を描画)を示す.
rem *                    [O]大文字のオーはPLOT_DATE_FORMATの形式の月を示す.
rem *                        3月間隔で月名を表示.
rem *                    [f]で目盛は1月間隔を指定.
rem *                    縦軸は指定せず横軸を南(下)に設定
rem *     :."Temperature and Rainfall in Maebashi": タイトル表示
rem *     -K             更にコードが続くことを指示
rem *     > %fig_out%    ファイル  %fig_out% に新規書き出し
rem * gawk "BEGIN{FS=\",\"}{if(2<=NR)print $1,$2}" inp_WC_maebashi.txt | psxy
rem *         gawk で区切り文字を「,」として
rem *         2行目から1列と2列のデータをpsxyコマンドに渡す
rem * gawk "BEGIN{FS=\",\"}{if(2<=NR)print $1,$5}" inp_WC_maebashi.txt | psxy
rem *         gawk で区切り文字を「,」として
rem *         2行目から1列と5列のデータをpsxyコマンドに渡す
rem * psxy(気温描画)
rem *     -Bs/a10f5g10:"Temperature (@%%12%%\260@%%%%C)":W
rem *              第二目盛のフォーマットでy軸を指定
rem *              数値10間隔,目盛5間隔,グリッド10間隔
rem *     :"Temperature (@%%12%%\260@%%%%C)":
rem *              縦軸ラベル.単位は (degree C).
rem *              小さい丸はフォント12でコード番号260として表示.
rem *     W        西(左縦軸)に目盛を設定
rem *     -W5,red  太さ5ptの赤線を描画
rem * psxy(雨量描画)
rem *     -R1999-01-01T/2010-01-01T/0/500
rem *                       横軸のプロット範囲は同じ.
rem *                       縦軸範囲を雨量描画のため0〜500に設定
rem *     -Gblue            線を青色に設定
rem *     -Sb1u             棒(bar)を描画.幅を1として[u]をつける.
rem *                       [u]をつけないと棒の幅がおかしくなる
rem *     -Bs/a100f50       [s]で第二目盛を示す.横軸は指定せず.
rem *                       縦軸数値を100間隔で表示し50間隔で目盛をふる
rem *     :"Rainfall (mm)": 縦軸ラベル
rem *     E                 東(右縦軸)に目盛を設定
rem *     >> %fig_out%      ファイル  %fig_out% に上書き
rem **************************************************************************



rem ============================
rem 流量図+流況図
rem ============================
set fig_out=fig_BOT_2.ps
rem ---------------------------------------
rem 流量データの大きい順の並び替え
gawk -f awk_sort.awk inp_QKF2008_dat.txt > _temp0.txt
rem ---------------------------------------
gmtset PLOT_DATE_FORMAT o 
gmtset TIME_FORMAT_PRIMARY Abbreviated
gmtset INPUT_DATE_FORMAT yyyy/mm/dd
gmtset ANNOT_FONT_SIZE_PRIMARY 14
gmtset LABEL_FONT_SIZE 14
gmtset HEADER_FONT_SIZE 16
gmtset HEADER_OFFSET 0.2c
gmtset TICK_LENGTH 0c
rem ---------------------------------------
rem 凡例用バッチファイル作成
gawk -f awk_klegend.awk inp_legend_BOT_2.txt > legend2.bat
rem ---------------------------------------
rem ---------------------------------------
rem 流量図を青,流況図を赤で描画
rem ---------------------------------------
psbasemap -R2008-1-1T/2008-12-31T/0/1000 -JX20/10  -U"%fig_out%" -Bpa1Og1O/a200g200:"Discharge (m@+3@+/s)":WSen:."Discharge at Kamifukushima gauging station in Tonegawa river": -K > %fig_out%
psxy inp_QKF2008_dat.txt -R -J -H -W3,blue -O -K >> %fig_out%
psxy _temp0.txt -R1/365/0/1000 -J -W5,red -O -K >> %fig_out%
rem ---------------------------------------
rem 流況に白抜き赤丸を描画
rem ---------------------------------------
gawk "{if(NR==1)  print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
gawk "{if(NR==35) print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
gawk "{if(NR==95) print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
gawk "{if(NR==185)print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
gawk "{if(NR==275)print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
gawk "{if(NR==355)print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
gawk "{if(NR==365)print $1,$2}" _temp0.txt | psxy -R -J -Sc0.2 -Gwhite -W5,red -N -O -K >> %fig_out%
rem ---------------------------------------
rem 流況表のベース(灰色ベタ塗に薄黄色ベタ塗を重ねる)
rem ---------------------------------------
psbasemap -R0/10/0/8 -JX5.2/4.2 -G150 -X14.5 -Y5.5 -O -K >> %fig_out%
psbasemap -R0/10/0/8 -JX5/4 -Glightyellow -X0.1 -Y0.1 -O -K >> %fig_out%
rem ---------------------------------------
rem 流況表描画
rem ---------------------------------------
echo 0.5 7.5 12 0 0 ML C.A.      | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 6.5 12 0 0 ML Max.      | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 5.5 12 0 0 ML 35th day  | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 4.5 12 0 0 ML 95th day  | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 3.5 12 0 0 ML 185th day | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 2.5 12 0 0 ML 275th day | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 1.5 12 0 0 ML 355th day | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 0.5 0.5 12 0 0 ML Min.      | pstext -R -J -Gred -P -O -K >> %fig_out%
echo 9.5 7.5 12 0 0 MR 3661km@+2@+ | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==1)  printf \"9.5 6.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==35) printf \"9.5 5.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==95) printf \"9.5 4.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==185)printf \"9.5 3.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==275)printf \"9.5 2.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==355)printf \"9.5 1.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
gawk "{if(NR==365)printf \"9.5 0.5 12 0 0 MR %%gm@+3@+/s\",$2}" _temp0.txt | pstext -R -J -Gred -P -O -K >> %fig_out%
rem ---------------------------------------
rem 座標原点を元に戻して凡例描画(-X-14.6 -Y-5.6)
rem (流況表表示で原点をずらしたため)
rem ---------------------------------------
echo 0 0 | psxy -R1/365/0/1000 -JX20/10 -Sp -X-14.6 -Y-5.6 -O -K >> %fig_out%
call legend2.bat

set fig_out=
del _*
del .gmt*

バッチファイルのダウンロードと画像確認

ファイル名概要
作図用バッチファイル
気温・流量入力データ
凡例用データ
凡例用バッチファイル
出力画像(気温と雨量の経時間変化)
データを大きい順に並び替えるawkスクリプト
流量入力データ
凡例用データ
凡例用バッチファイル
出力画像(流量経時変化と流況図)



inserted by FC2 system