You are on page 1of 14

http://researchmap.

jp/muuokv4p4-1772021/#_1772021
GrADSに関して詳しいページ
GrADS講習会 第一回
GrADS-Note http://seesaawiki.jp/ykamae_grads-note/
GrADSコマンドやスクリプトのメモ、インストールについて

東北大学大学院理学研究科 流体地球物理学講座 公開情報/GrADS


必ずブックマークしておきたい http://wind.geophys.tohoku.ac.jp/index.php?%B8%F8
%B3%AB%BE%F0%CA%F3%2FGrADS

GrADSで図を描く練習 GrADS コマンドリファレンス


吉田さんによるコマンドリファレンス日本語訳
http://radar.sci.hokudai.ac.jp/~yoshida/study/GrADS/Command/

GrADS リファレンスマニュアル http://mausam.hyarc.nagoya-u.ac.jp/%7Ehatsuki/grads/gradsmanu.html


藤波さん作成マニュアル

IT memo http://hydro.iis.u-tokyo.ac.jp/~kei/?IT%20memo%2FGrADS%20memo
09 年4 月作成 芳村さんによるやや上級者向け情報
14年1月修正
Y. Kamae GrADS Documentation Index http://www.iges.org/grads/gadoc/gadocindex.html
2
http://seesaawiki.jp/ykamae_grads-note/
GrADS本家のコマンド説明(英語)

NCEP/NCAR
今日の内容

研究を行なうには、データが必要。
再解析データ
1. NCEP/NCAR 再解析データ 研究に使うデータはどこにある?
・観測 自分で収集する
2. wget データのダウンロード
・解析 誰かが作ったデータを使う(陸域センター、気象庁、研究所、・・・)

3. sdfopen NetCDFファイルを開く
NCEP/NCAP 再解析データ
4. q file ファイルの情報を調べる
アメリカの大気研究センター、環境予測センターが管理している全球のデータセット
5. d 変数名 図を描く 1949年~現在まで

6. xanim アニメーションを描く ○世界で一番降水が多い地域は?


○日本の平年の冬の気圧配置
○過去50年の気温の変化傾向

いろんなことを調べることができます

3 今回は、各月の平年の値(気候値)のデータについて見てみましょう 4
公開されているデータのページ wget sdfopen
http://www.cdc.noaa.gov/cdc/data.ncep.reanalysis.derived.surface.html データをダウンロード grads
ncデータを
する と打ち、GrADSを起動させる GrADSで開く
まずは sea level pressure の ltm(長期間
平均)データをダウンロードしてみよう nc (NetCDF) 形式のファイルは、
リンクにマウスを合わせ、右クリック* sdfopen ファイル名
*Macではcontrol+クリック
→リンクのURLをコピー で開くことができます つまり sdfopen slp.mon.ltm.nc と入力
→ターミナルを開き、マウスの中クリック*
*2ボタンマウスでは左右同時クリック、
Macではoption+クリック

URLがペーストされる ※プログラミングなどでよく使うバイナリ(bin)形式のデータを開くときは、

入力したURLの前に、wget と入力 つまり コントロール(ctl)ファイルを作る必要があります。

名前 拡張子 GrADSで開くコマンド
wget ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/surface/slp.mon.ltm.nc
を、実行 NetCDF .nc sdfopen ~.nc
ファイルがダウンロードされる wget ファイルの場所
ファイルのダウンロード
コントロールファイル .ctl open ~.ctl
ls と打って、ファイルがダウンロードされたか確認 5 6

c 一度図を消して
q file q file set t 2 時間を2ステップ目(2月)に設定

xanim
と打つと、今開いたデータの情報 データの情報を d slp 図を描く アニメーション
を調べることができる 調べる
1番のファイルとして認識 ファイルについての説明 set t 1 12 1月から12月まで
d slp アニメーションで見る ←早すぎてよくわからない・・・
File 1 : Longterm Monthly Mean SLP NCEP Reanalysis
Descriptor: slp.mon.ltm.nc ファイルの名前
※ http://seesaawiki.jp/ykamae_grads-note/
Binary: slp.mon.ltm.nc の GrADSスクリプトライブラリ 参照
東西、南北、高さ、時間方向の
Type = Gridded c
データの数
Xsize = 144 Ysize = 73 Zsize = 1 Tsize = 12 1月から12月までのアニメーション。
Number of Variables = 1 set t 1 12 図をクリックするたびにひと月進む。
slp 0 -999 Monthly Longterm Mean of Sea Level Pressure
xanim ‐pause slp 上に時間も表示されてわかりやすい!
変数名

d 変数名
d のあとに変数名を入力すると、図が描ける --練習--
d slp slp以外の好きなファイルをダウンロードして、図を描いてみよう!
図を描く
※降水について描いてみたい場合は
最初に入っていたデータ(1月)の図 つまり ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/surface_gause/prate.mon.ltm.nc
7 8
1968 - 1996 年平均の1月の海面気圧が描かれる をwget
GrADS講習会 第二回
局地的な観測データはテキスト形式、衛星データはhdf形式で公開されているものが多いが、
全球データはNetCDF形式のものが多い
→GrADSが大活躍
今回の使用データ

NOAA(アメリカ海洋大気圏局 )サイト

エルニーニョを描く http://www.esrl.noaa.gov/psd/data/gridded/data.noaa.ersst.html
にある、ERSST 公開データ sst.mnmean.nc

xtermを起動(MacならX11、cygwinならstartxwin.sh etc)

http://researchmap.jp/muwnuoeel-1772021/#_1772021
GrADSとGrADSスクリプト
にある ”02grads.zip” をダウンロード、作業ディレクトリに置く
9798elnino.gs cor_reg.sh fwrite-sst.gs
unzip 02grads.zip
mon-ave.gs mon-fig.gs nino3ano.gs
cd 02grads
09 年4 月作成 sst1980-1999.ctl sst_mul.gs
14年1月修正
Y. Kamae wget ftp://ftp.cdc.noaa.gov/Datasets/noaa.ersst/sst.mnmean.nc
2
http://seesaawiki.jp/ykamae_grads-note/
sst.mnmean.nc を GrADSで開いてみよう

grads GrADSを起動、Enter2回、白画面クリック
c 図を消す
sdfopen sst.mnmean.nc NetCDFファイルを開く
set gxout shaded シェードを描こう
q file ファイルの情報を見る
set display color white 背景を白に変更
1番目に開いたファイルなので、file 1
c
File 1 : NOAA Extended Reconstructed SST V2
Descriptor: sst.mnmean.nc d sst 新しい設定で図を描き
Binary: sst.mnmean.nc cbar カラーバーを表示
Type = Gridded
Xsize = 180 Ysize = 89 Zsize = 1 Tsize = 1850 x, y, z, t方向にどれだけデータがあるか reinit 初期状態に戻す
Number of Variables = 1
sst 0 -999 Monthly Means of Sea Surface Temperature などなど

変数名

GrADSでデータを開いたときは、まずq fileをして、ファイルの情報を確認しよう GrADSに関しては、学群実験のテキストや

ここで変数名が何かわかるので、dで図を描く 東北大学大学院理学研究科 流体地球物理学講座 公開情報/GrADS


http://wind.geophys.tohoku.ac.jp/index.php?%B8%F8%B3%AB%BE%F0%CA%F3%2FGrADS
d sst 変数名sstについての図を描く
を参照すれば、大抵のことはできるようになります
3 4
領域平均 時系列
北緯4度から南緯4度,西経150度から90度の海域はNino3と呼ばれ,気象庁は 水平方向に幅のあるデータは、何も設定しないと水平分布図が描かれます。
Nino3の月平均海面水温を用いてエル・ニーニョを定義しています。 このとき水平方向の幅をなくし、代わりに時間方向に幅を持たせると、時系列図
が描かれます。
この領域で平均した値を使って、エルニーニョの強弱の時系列を書いてみよう

reinit
領域平均: aave(変数名, lon=A,lon=B,lat=C,lat=D)
sdfopen ~.nc
その変数について、東西A~B°、南北C~D°の領域で平均した値
set x 1
←水平方向の幅をなくす
set y 1
90 set t 1 120 ←時間方向に幅を持たせる
sdfopen ~.nc
a=aave(sst,lon=210,lon=270,lat=-4,lat=4) a=aave(sst,lon=210,lon=270,lat=-4,lat=4)
0 d a
d a 210 270
↑領域平均の値をaと定義し、aを描いた
-90
t=1 で 25.4629 となる 0 3605 10年間のNino3 SSTの時系列が描かれた
6

時間平均、気候値、偏差 GrADSスクリプト
d ave(変数名,t=a,t=b) で、時間a~bの期間の平均値が描かれるのはおなじみ 今までやってきたことを、レシピのように書き留めて、一発で図を描かせることができる
1980年1月から、1999年12月までの、偏差時系列を描いてみよう nino3ano.gs 9798elnino.gs
偏差時系列を図化 強Elnino時の偏差を図化
reinit
sdfopen ~.nc
'reinit' 'reinit'
set x 1 'sdfopen sst.mnmean.nc' 'sdfopen sst.mnmean.nc'
'set x 1' 'set t 1 12'
set y 1 'set y 1' 'clim=ave(sst,t+1512,t=1752,12)'
set t 1513 1752 ←1980年1月~1999年12月 'set t 1513 1752' 'modify clim seasonal'
'a=aave(sst,lon=210,lon=270,lat=-4,lat=4)' 'set t 1'
a=aave(sst,lon=210,lon=270,lat=-4,lat=4) 'set t 1 12' 'd ave(sst-clim,t=1727,t=1729)'
set t 1 12 ←1月から12月までの 'clim=ave(a,t+1512,t=1752,12)' 'print 9798elnino.eps'
'modify clim seasonal'
clim=ave(a,t+1512,t=1752,12) ←各月ごとの20年間平均値(気候値)を計算 'set t 1513 1752'
'd a-clim'
modify clim seasonal ←気候値climを12か月周期のデータにする
'print nino3ano.eps'
set t 1513 1752 gradsを起動、 run ~.gs で実行
d a-clim ←偏差=生の値-気候値(20年間平均値) 7 gradsを終了したのち、 gs ~.eps 8
で図ができているか見てみよう
82/83年、97/98年が強いエルニーニョ年だったことがわかる
GrADS講習会 第三回 第二回で扱ったデータを使います
・ 02gradsディレクトリがある人は、そこへ移動
・ ない人は、第二回 2ページ目のコマンドを実行

ctlファイルとGrADSスクリプト データ bin


nc
ファイルの種類と 格子情報 ctl
役割 データと格子情報を binデータの格子情報
binファイルへの書き出し、 含む元データ をGrADSに伝える

gs GrADSスクリプト
ループで作図 nc NetCDFファイル GrADSに作業をさせる
gs スクリプト
bin バイナリデータ
データ切り出し 作図
ctl コントロールファイル 計算など
09 年4 月作成 png, eps 画像の形式
14年1月修正
Y. Kamae bin png, eps他
2
http://seesaawiki.jp/ykamae_grads-note/

作業の流れ binファイルへの書き出し、ctlファイル
sst.mnmean.nc
fwrite-sst.gs sst1980-1999.ctl
154年×12ヶ月の
データ・格子情報 必要な20年間だけ取り出してbinに変換 binをGrADSで読むためのファイル

fwrite-sst.gs ①20年間のデータだけ切り出す 読み込みたい
スクリプト dset ^sst1980-1999.bin
‘reinit’
binファイル titile monthly sst 1980-1999 NOAA ERSST
‘sdfopen sst.mnmean.nc’
undef 32767
‘set x 1 180’
sst1980-1999.bin sst1980-1999.ctl options 365_day_calendar little_endian
20年×12ヶ月 格子情報 ‘set y 1 89’
データ元サイト xdef 180 linear 0 2.0
データ ‘set t 1513 1752’
やq fileの情報 ydef 89 linear -88.0 2.0
② ‘set fwrite -le sst1980-1999.bin’
をもとに記述 tdef 240 linear 1jan1980 1mo
mon-ave.gs ②各月の気候値(平年値)を作成 ‘set gxout fwrite’
zdef 1 levels 1
‘d sst’
vars 1
‘disable fwrite’
mon-ave.bin mon-ave.ctl データをファイルに sst 1 0 x,y sst
気候値×12ヶ月
書き出す endvars


mon-fig.gs ③各月の図を描く ctlファイルの書式については、
gradsを起動させ、run fwrite-sst.gs で実行 http://seesaawiki.jp/ykamae_grads-note/
→”GrADS ctlファイルの作成”
reinit し、open sst1980-1999.ctl で開き、 などを参考に
mon-1.png ・・・ mon-12.png 3 d sst で描かれるのは1980年1月のデータ 4
ループを使って書き出し できたbinファイル「mon-ave.bin」を読むctlファイルを作ろう(以前のctlファイルをコピーして書き換
えよう)

mon-ave.gs cp sst1980-1999.ctl mon-ave.ctl


vi mon-ave.ctl
基本的にfwrite-sst.gs 20年(240カ月)のデータを使って、各月の気候値(平年値)を作る
と同じ
mon-ave.ctl
'reinit'
'open sst1980-1999.ctl' 赤の部分を書き換える dset ^mon-ave.bin
クオーテーションで囲ま 'set x 1 180' だけでよい title monthly average sst 1980-1999 NOAA ERSST
ない場所は、grads自体 'set y 1 89'
'set gxout fwrite' titleは書き変えなくても undef 32767
には命令されない
'set fwrite -le mon-ave.bin' 問題ない options 365_day_calendar little_endian
t=1 xdef 180 linear 0 2.0
while(t<=12) ydef 89 linear -88.0 2.0
t の値が1ずつ増えて 'set t 't'' ・ 対応するbinファイル名 tdef 12 linear 1jan1980 1mo
いく 'd ave(sst,t+0,t=240,12)' zdef 1 levels 1
t=t+1 ・ 変更した空間、時間の情報
=tのループが1~12 vars 1
の範囲で回る※ endwhile を書き換えればよい sst 1 0 x,y sst
'disable fwrite' endvars

grads -lc mon-ave.gs で実行


grads -lc ~.gs 今回の場合、読みこむbinファイルがmon-ave.binになったこと、時間の総数が240から
~.gsの実行 12になったこと、の2点だけ変更すれば、あとはGrADSを起動させて
open mon-ave.ctl
5 で、図にできることが確認できる 6
※この場合はset t 1 12でも同じだが、後述の図の書き出しなどの際はループを使う必要がある d sst

それぞれの行の役割を、東北大のGrADSページを見て調べ
mon-fig.gs てみよう

'reinit'
'open mon-ave.ctl' 'set gxout contour'
'set lon 40 240' 'set clopts 1 2 0.18'
'set lat -40 60' 'set clevs 0 2.5 5 7.5 10 12.5 15 17.5 20 22.5 25 27.5
'set display color white' 30 32.5'
t=1 'set cthick 4'
while(t<=12) 'set ccolor 1'
'c' 'set grads off'
'set t 't'' 'd sst'
'set gxout shaded' 'draw title NOAA ERSST clim sst <1980;1999> mon='t''
'set rgb 20 0 0 255' 'printim mon-'t'.png'
'set rgb 21 100 100 255' t=t+1
'set rgb 22 200 200 255' endwhile
'set rgb 23 255 255 255'
'set rgb 24 255 200 200'
'set rgb 25 255 100 100'
まずは、grads -lc mon-fig.gs で実行
'set rgb 26 255 0 0'
'set clevs 5 10 15 20 25 30' 「各月のアジア域の図が、低温青、高温赤のシェードと
'set ccols 20 21 22 23 24 25 26'
'set grads off' コンターで描かれる」
'd sst'
'cbar'
quit で終了し、ls してみると、12個の図ができている
ことがわかる 「気候値SSTの季節変化」の図の完成!

アカウント名ディレクトリ→02grads 7 8
に移動してみると、それぞれの図があるはず
GrADS講習会 第四回

第二回・第三回で扱ったデータを使います

・ 02gradsディレクトリがある人は、そこへ移動
・ない人は、第二回 2ページ目のコマンドを実行
カラーパレットの設定
図の書き出し

09 年4 月作成
14年1月修正
Y. Kamae
2
http://seesaawiki.jp/ykamae_grads-note/

※色番号
カラーパレット(初期設定) カラーパレットの設定
1~15番は既に設定されている
set rgb 20 200 200 200 自分で色を設定したい場合は、16以降を使う
grads GrADSを起動、Enter2回、白画面クリック set rgb 21 100 100 100
set rgb 22 0 0 0 この7行を打ち込むと、↓の3色の図になる
sdfopen sst.mnmean.nc NetCDFファイルを開く set clevs 15 25
q file ファイルの情報を見る(一番左下に変数名が表示される) set ccols 20 21 22
d sst
d sst 変数名sstについての図を描く cbar
c 図を消す
set gxout shaded シェードを描く set rgb 20 200 200 200
set display color white 背景を白に変更 色番号※=20を赤=200、緑=200、青=
200に設定
c
d sst 新しい設定で図を描く set clevs 15 25
cbar カラーバーを表示 境界の値を「15」「25」に設定
c 図を消す 値 ~15 15~25 25~
set ccols 20 21 22
番号 20番 21番 22番
clevsで設定した境界の値に従って、色番
コンター、シェードを描くとき、カラーパレットの初期設定はレインボーになっている 号をあてはめる 赤緑 200 200 100 100 0 0 0
3 4
青 200 100
rgbの設定 colorコマンド

colorというコマンド※を使えば、いちいち設定
光の3原色を使って色を設定する しなくても自動で色をつけてくれる color min max int
r g b
c minからmaxまで、int間隔で設定
黒 0 0 0 (コンターを引くときも使える)
color 0 30 2.5
赤 255 0 0 d sst
R cbar
緑 0 255 0
青 0 0 255 0から30まで、2.5きざみで、低いほど寒色系、
高いほど暖色系のカラーパレットを作成
黄 255 255 0
紫 255 0 255
G B
青緑 0 255 255
※正確にはコマンドではなくスクリプト。color.gsという
白 255 255 255 GrADSスクリプトを指定の場所に置いておくことで、
「color」と打ちこんだときにそのスクリプトが起動される。具
http://ja.wikipedia.org/wiki/RGB 体的にはgrads本体があるディレクトリの一つ上のlib/の中
など
5 http://seesaawiki.jp/ykamae_grads-note/ → GrADSスクリプトライブラリ 参照 6
その他の色の例は http://www.scollabo.com/banban/lectur/websafe.html

色を塗るときの注意 図の書き出し ※Ver.1.8以前のGrADSでは


enable print hoge.gx

画面に表示させた図をファイルにするには? print
寒色系 気温の変化 暖色系
disable print
地上気温の
将来変化 png形式にしたい場合 !gxeps –c –i hoge.gx –o hoge.eps
冷たい、寒い 温かい、熱い printim ~.png
イメージ イメージ
図の解像度を上げたい
color min max int -kind blue->white
eps形式にしたい場合
print ~.eps epsに対応した環境であれば、epsを使用。
->yellow->red->darkred 夏季平均
png(や、jpg、gif)を使いたい場合は、まずepsで図を出力し、
※Ver.1.9以上のGrADSのみ convertで高画質変換する。
GrADS内で
茶色、赤 降水量の変化 緑、青 作成した図を表示するには?
降水量の print hoge.eps
将来変化
コマンドラインで
乾燥した 湿潤な png形式の図を表示(ImageMagick)
イメージ イメージ convert -density 600 -resize 600 -rotate 90
display ~.png
+antialias hoge.eps hoge.png

color min max int -kind saddlebrown->white->green -densityで解像度を指定、-resizeでサイズを指定、 -rotateで


eps形式の図を表示(ghostscript)
90度回転させ、 +antialiasで邪魔な横線が入らないように
IPCC 2007 Ch.11より gs ~.eps pngに変換
display hoge.png
描く物理量によってカラーパレットを変えると、イメージが伝わりやすい pptに載せる程度であれば、pngで十分 で確認。printimで作成したときより、画質が高いことがわかる。
7 8
GrADS講習会 第五回
1. 文字
タイトル表示draw title CMAP Pr & NCEP/NCAR 850hPa Wind JJA

xy軸ラベル間隔
set xlint 10
set ylint 10
GrADS作図オプション
xy軸ラベル文字
色(初期1)、太さ4、大きさ0.12
set xlopts 1 6 0.19
見やすい図に仕上げる set ylopts 1 6 0.19

コンターラベル文字
色(初期1)、太さ1、大きさ0.09
set clopts 1 5 0.22
ラベルの表示・非表示
09 年4 月作成 set clab off
14年1月修正 set clab on
Y. Kamae
その他:GrADSコマンドリファレンス 軸ラベル・アノテーション
2
http://seesaawiki.jp/ykamae_grads-note/
http://radar.sci.hokudai.ac.jp/%7Eyoshida/study/GrADS/Command/axis.html

コンター:set gxout contour


2. コンター・シェード シェード:set gxout shaded
3. ベクトル ベクトル:set gxout vector
d 東西風;南北風
色の設定、間隔の設定については第四回参照
弱いベクトルの非表示
シェードを等間隔表示 uとvの√二乗和が~以下のとき非表示
最小値 最大値 間隔 色のグラデーション umask=maskout(u,mag(u,v)-2)
color 2.5 15 2.5 –kind white->green vmask=maskout(v,mag(u,v)-2)
カラーバーの表示
大きさ 縦0/横1 x方向中心位置 y方向中心位置
ベクトルを数点間隔で描く
cbarn 1 0 5.5 0.18
d skip(umask,2);skip(vmask,2)
コンターを引く値
set clevs 5 15 20
コンターの太さ
set cthick 5
コンターの色
set ccolor 1
ラベルの非表示
set clab off その他:GrADSコマンドリファレンス グラフィックオプション その他:GrADSコマンドリファレンス グラフィックオプション
3 4
http://radar.sci.hokudai.ac.jp/%7Eyoshida/study/GrADS/Command/graph_opt.html http://radar.sci.hokudai.ac.jp/%7Eyoshida/study/GrADS/Command/graph_opt.html
①降水のシェードを描く 数値軸の範囲の設定
'reinit' ②風のベクトルを描く ③降水のコンター(ラベルなし→ラベル 4. 折れ線 set vrange 1 10
あり)を描く
'sdfopen precip.mon.ltm.nc' 'sdfopen uwnd.mon.ltm.nc'
'set gxout shaded' 'sdfopen vwnd.mon.ltm.nc' 'sdfopen precip.mon.ltm.nc'
'set display color white' 'set vpage 0.1 11.0 0.3 8.5' 'set vpage 0.1 11.0 0.3 8.5'
'c' 'set lon 40 160' 'set lon 40 160'
'set lat -20 50'
折れ線の太さ、スタイル、色
'set vpage 0.1 11.0 0.3 8.5' 'set lat -20 50'
'set lon 40 160' 'set z 3' 'set xlint 10' set cthick 9
'set lat -20 50' 'set xlint 10' 'set ylint 10'
'set xlopts 1 6 0.19'
set cstyle 2
'set xlint 10' 'set ylint 10'
'set ylint 10' 'set xlopts 1 6 0.19' 'set ylopts 1 6 0.19' set ccolor 8
'set xlopts 1 6 0.19' 'set ylopts 1 6 0.19' 'set gxout contour‘
'set ylopts 1 6 0.19' 'set grads off' 'set clevs 5 15 20'
'set grads off' 'uave=ave(uwnd.1,t=6,t=8)' 'set cthick 5'
'set ccolor 1' マーカーの大きさ、スタイル
'color 2.5 15 2.5 -kind white- 'vave=ave(vwnd.2,t=6,t=8)'
>green' 'umask=maskout(uave,mag(uave,vav 'set clab off' set digsiz 0.15
'd ave(precip,t=6,t=8)' e)-2)' 'set grads off'
'set mpdraw off' set cmark 4
'cbarn 1 0 5.5 0.18' 'vmask=maskout(vave,mag(uave,vav
'close 1' e)-2)' 'd ave(precip,t=6,t=8)'
'set mpdraw off' 'set clopts 1 5 0.22'
'd skip(umask,2);skip(vmask,2)' 'set clevs 10'
'close 2' 'set cthick 5' 気候値の図などで、年を消した
'close 1' 'set ccolor 1' いとき
'set clab on'
'set grads off' set tlsupp year
'set mpdraw off'
格子情報が異なるため、降水と風は同時に開かず、閉 'd ave(precip,t=6,t=8)'
じてからsetをし直し描く 'draw title CMAP Pr & NCEP/NCAR
その他:GrADSコマンドリファレンス グラフィックオプション
850hPa Wind JJA' http://radar.sci.hokudai.ac.jp/%7Eyoshida/study/GrADS/Command/graph_opt.html
背景の地図はdのたび色が変わってしまうので、2回目 5 6
'print sakuzu.eps'
以降は上書きしない http://radar.sci.hokudai.ac.jp/%7Eyoshida/study/GrADS/Command/color.html
'printim sakuzu.png'

つづき (凡例の表示)
4. の作図スクリプト 'reinit'
'sdfopen precip.mon.ltm.nc' ‘set line 0’
'set x 1' ‘draw recf 8.4 6.5 10.2 7.6’
南アジア 北オーストラリア ‘set line 1 1 6’
70~100E 120~150E
'set t 1 12'
で定義 'set display color white' ‘draw rec 8.4 6.5 10.2 7.6’
EQ~20N 20S~EQ
'set gxout shaded' ‘cbar_line_set –x 8.7 –y 7.3 –r 0.08 –n 9 –l 1 –c 9 –m 2 –z 0.16 –sn 6 –sz 0.20 –t “Aust”’
'c' ‘cbar_line_set –x 8.7 –y 6.8 –r 0.08 –n 9 –l 2 –c 9 –m 4 –z 0.16 –sn 6 –sz 0.20 –t “Asia”’
'set vpage 0.1 11.0 0.1 8.5' 'draw title CMAP Pr South Asia vs North Australia'
'set vrange 1 10' 'print hoge.eps'
'set xlopts 1 6 0.19'
'set ylopts 1 6 0.19'
'set digsiz 0.15' 「color」「cbarn」「cbar_line_set」の使用法について
'set cthick 9' http://seesaawiki.jp/ykamae_grads-note/ → GrADSスクリプトライブラリ
'set cstyle 2' ※使用データ
'set cmark 4'
'set ccolor 8' http://www.cdc.noaa.gov/PublicData/より
'set tlsupp year'
'set grads off'
NCEP/NCAR Reanalysis 長期間月平均データ
'd tloop(aave(precip,lon=70,lon=100,lat=0,lat=20))'
↑6~8平均-12~2平均の降水量分布 'set cmark 2'
'set cstyle 1' 東西風 ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/pressure/uwnd.mon.ltm.nc
'set ccolor 9'
'set tlsupp year' 南北風 ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/pressure/vwnd.mon.ltm.nc
'set grads off'
南北半球の乾季と雨季の交替 'd tloop(aave(precip,lon=120,lon=150,lat=-20,lat=0))' CMAP(CPC Merged Analysis of Precipitation) standard長期間月平均データ
次ページにつづく 7 8
降水量 ftp://ftp.cdc.noaa.gov/Datasets/cmap/std/precip.mon.ltm.nc
GrADS講習会 第六回

第二回・第三回で扱ったデータを使います

・ 02gradsディレクトリがある人は、そこへ移動
・ ない人は、第二回 2ページ目のコマンドを実行

GrADSのウィンドウと
描画の位置

09 年4 月作成
14年1月修正
Y. Kamae
2
http://seesaawiki.jp/ykamae_grads-note/

GrADSの起動時、画面の大きさを変えられる
sst.mnmean.ncを開き
8.5
大きさ:400 x 500 set display color white
格子:8.5 x 11.0 c
8.5格子

大きさ:500 x 400 set xlopts 1 4 0.22


x軸とy軸のラベル
11.0格子

格子:11.0 x 8.5 を大きく


set ylopts 1 4 0.22
d 変数
0.0
0.0 11.0
11.0格子 ラベルが左端をはみ出してしまう

grads -l landscapeモード 8.5格子 parea


そこで、図の四角枠の範囲を狭め、画面に収まる
=横長 ようにする
grads -p
portraitモード c
大きさ:250 x 200 図の枠の範囲を
=横長 set parea 1.0 10.0 0.0 8.5
設定
格子:11.0 x 8.5 gradsの起動オプション
-l 横長 -b バッチモード(黒画面開かない) d 変数
-p 縦長 -c コマンド名 起動後、このコマンドを実行
図の枠を狭めたので、ラベルも画面に収まる
-help 起動オプション表示
grads –lg 250x200 -g 大きさ
例. GrADSでhoge.gsをrunさせる 3 4
→ grads –lc hoge.gs
1.0 10.0 図の枠外の範囲を決めたいときは、set vpageを使う
sst_mul.gs
一度に複数の図を並べることもできる 画面分割の例 'reinit'
8.0 'set display color white'
c 'c'
'set gxout shaded'
'sdfopen sst.mnmean.nc'
画面の下に set parea 0.0 11.0 0.5 4.0 'set parea 0.5 8.0 1.4 5.5'
4.5
4.0 'set xlopts 1 6 0.19'
t=1 を描き d 変数(t=1) 'set ylopts 1 6 0.19'
'set ylint 30'
画面の上に set parea 0.0 11.0 4.5 8.0 'set x 1 180'
'set y 1 89'
0.5 'set time aug2000'
t=2 を描く d 変数(t=2)
'color -5 30 5'
ただし色や書式の設定を直さないといけないので、面倒 'set grads off'
'd sst'
'cbarn 1.1 0 4.25 0.4'
'set parea 8.5 10.8 1.4 5.5'
mul.gsを使うと、もっと楽! 'set gxout line'
'a=ave(sst,x=1,x=180)'
2 c 'set x 1'
'set xyrev on'
横1x縦2に分割し 'set ccolor 1'
(1,1)に
mul 1 2 1 1
'set cthick 10'
2000年8月のSST分布と東西平均SST分布 'set cmark 0'
1 t=1 を描き d 変数(t=1) 'set vrange -10.0 30.0'
'set xlint 10'
(1,2)に mul 1 2 1 2 'set grads off'
1 t=2 を描く d 変数(t=2)
'd a'
'print hoge.eps'
'!convert -rotate 90 -density 600
-resize 600 +antialias hoge.eps
mul.gs について sst_mul.png'
5 6
'!rm hoge.eps'
http://seesaawiki.jp/ykamae_grads-note// → GrADSスクリプトライブラリ

GrADSの新しいバージョンについての情報

http://seesaawiki.jp/ykamae_grads-note/d/GrADS2%a4%de%a4%c8%a4%e1

GrADS 2.1以降
gxprint 任意のフォーマットの画像ファイルを出力
set rgbで透過色を作成
set tileでドットや格子状のタイル模様を描く
Cairoフォントが使用可能
マークが追加
set gxout shade2に対応
グリッド内挿(解像度の変更) lterp
365 day calendarのNetCDFファイルに対応していない
z軸を降順に並びかえ
shapefileの読み書き
sdfwrite NetCDFの作成
set clab masked コンターラベルを重ならないように描く
画面アスペクト比を変更(V2.0.a9以降)
GRIB2形式のデータを読む
wgrib2の入手とコンパイル
g2ctlの入手
実行
GrADS2 システム要件
GrADS2のインストール

など
7 8
キホン
ascii(人間が読めるデータ)をbinary(機械しか読めないデータ)に変換するプログラム

-0.1 2.5 4.0 1.1 -10.0 という中身のdata1.txtを作り、これをbinaryに変換してみよう

program main
implicit none 暗黙の型宣言を解除

ASCIIを変換して integer,parameter:: nn=5


real:: a(nn)
変数の数を設定
変数の型を宣言
integer:: in
GrADSで読む open(10,file='data1.txt', & asciiファイルのopen
access='sequential',form='formatted')
open(20,file='data1.bin', & binaryファイルのopen
Fortran + GrADS access='direct',form='unformatted',recl=4*nn)

read(10,*) (a(in),in=1,nn)
write(20,rec=1) (a(in),in=1,nn)
コンパイラはifort
09 年4 月作成 end 等でもよい
14年1月修正
以上のプログラムをtxt-bin.f90という名前で作成し、 g95 txt-bin.f90
Y. Kamae 2
http://seesaawiki.jp/ykamae_grads-note/ ./a.out

まずは簡単にf90の基本の書式を書き、データをカンマ区切りで読んでみる。
実践
program main
例としてISLSCP2_1 http://islscp2.sesda.com/ISLSCP2_1/data/snow_sea-ice_oceans/snow_cover_xdeg/
integer:: c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,d
のNorthern Hemisphere Monthly Snow Cover Extentデータをbinに変換し、 real:: a,b
GrADSで読んでみよう!
ASCIIデータをopen
open(10, file='snow_cover_data_1d_1986.csv', &
status='unknown',access='sequential',form='formatted')
cd 02grads
snow_cover_data_1d_1986.csv というデータが1995年まである。 read(10,'(66a)') ヘッダ行66文字を読む
ls
csv形式(ASCII)なのでlessで読める。 read(10,*)&
a,b,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,d
less snow_cover_data_1d_1986.csv 書式識別子を * にしておくと , などを適当に読み飛ばしてくれる
最初の2つが経度緯度、12個が各月データ、最後が海陸
write(6,*)&
LONG,LAT,JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC,LAND_MASK a,b,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,d
-38.50,83.50,100,100,100,100,100,100,100,100,100,100,100,100,1 end
-37.50,83.50,100,100,100,100,100,100,100,100,100,100,100,100,0
・・・ コンパイラはifort
以上のプログラムをread-csv.f90という名前で作成し、 g95 read-csv.f90 等でもよい
というような並びになっている。
このデータをfortranで読み、緯度経度時間並びのbinaryに変換してみよう。 ./a.out
すると
-38.50000 83.50000 100 100 100 100 100 100 100 100 100 100 100 100 1
3 4
と出力される。無事、実数・整数など読み込みに成功したようだ。
あとは、宣言文を正確に記述し、最終的に(経度,緯度,時間)の変数としてbinに出力させる。
program main
implicit none !暗黙の型宣言の無効
integer, parameter:: nl=8721,nx=360,ny=60,nmon=12 !整数の定数
real, parameter:: undef=1e+20 !実数の定数
integer:: c(nl,nmon),d(nl) !整数の変数
integer:: iy,il,mon,lat,lon !ループに使う整数
real:: a(nl),b(nl),ilon,ilat !緯度経度(実数) binaryを読むctlファイルの作成
real:: snow(nx,ny,nmon) !書き込むデータ(実数)

open(10, file='snow_cover_data_1d_1986.csv', &


vi test.ctl
status='unknown',access='sequential',form='formatted') g95 csv-bin.f90
open(20, file='test.bin', &
status='unknown',access='direct',form='unformatted',recl=4*nx*ny)
./a.out dset ^test.bin
read(10,'(66a)') title test
do il=1,nl
read(10,*) & options big_endian エンディアンはlittleかbigか確認する
a(il),b(il),c(il,1),c(il,2),c(il,3),c(il,4),c(il,5),c(il,6),&
c(il,7),c(il,8),c(il,9),c(il,10),c(il,11),c(il,12),d(il) !データcはilとmonの配列にする undef 1e+20
enddo !il
do lat=1,ny xdef 360 linear -180.00 1.00
do lon=1,nx
ilat=lat+23.50 ydef 60 linear 24.50 1.00
ilon=lon-180.50
do il=1,nl zdef 1 levels 1000 grads
if((b(il)==ilat).and.(a(il)==ilon)) then !il行目のlatlonがilatilonと一致したとき
do mon=1,nmon
tdef 12 linear jan1986 1mo
snow(lon,lat,mon)=real(c(il,mon)) !lonlatmonの関数snow=ilmonの関数c の実数型 vars 1 open test.ctl
enddo !mon
goto 100 !一致したときは100へ、一致しなかったときは下へ q 0 99 x,y q d q
endif !a,b
enddo !il endvars で図に描ける。
do mon=1,nmon
snow(lon,lat,mon)=undef
enddo !mon !どのil行目のlatlonもilatilonと一致しなかったとき、データは存在しないため、欠損値を入れる
goto 100
100 continue
enddo !lon
enddo !lat
do mon=1,nmon
write(20,rec=mon)((snow(lon,lat,mon),lon=1,nx),lat=1,ny) !rec=時間とするとgradsで読みやすい
write(6,*) ((lon,lat,snow(lon,lat,mon),lon=1,nx),lat=1,ny) !結果の画面表示 5 6
enddo !mon
end

grads
open test.ctl
set display color white
c Fortran について参考になるページ
set lat 50 90
http://seesaawiki.jp/ykamae_linux-note/d/Fortran
color 0 100 10 -kind white->aqua-
>dodgerblue->black
に掲載のリンク参照
set gxout grfill
map nps
d q
cbar

で左の図が描ける。

7 8

You might also like