GrADSのgmfファイルをwordに張り付けたりepsファイルに変換したときに, 横線が入ってしまうことがありますが, 横線が入らないように高解像度(主に投稿論文用)のビットマップ形式の図を作る方法です.
ポイントはgmfファイルをgxepsでepsにした後, 画像処理ソフトでアンチエイリアシングなしで読み込むことです. 以下,gimpとIllustratorについて説明します. 他の画像処理ソフトでも同様の方法でできると思います.
gimpでepsファイルを読み込むと,解像度やアンチエイリアシングについての設定画面になるので, ここで解像度を指定し,アンチエイリアシングなしで読み込み, 好みのファイル形式で書き出せば終了です.
Illustratorではepsファイルを読み込んだ後で,好みのファイル形式で書き出すときに, 解像度とアンチエイリスなしを指定します. また「オブジェクト」の「ラスタライズ」コマンドでビットマップ化するときに解像度と アンチエイリアスなしを指定することもできます.
GrADSのステーションデータをMatlabで作成する方法です.
まず,本家GrADSのページ で例として挙げられている降水量データを作成するプログラム例です. 若干手抜きですが,時間や降水量等のデータはプログラム内で定義しています.
outname='station.grd'; lat(1:4)=[34.3 44.2 22.4 33.4]; lon(1:4)=[-85.5 -84.5 -83.5 -82.5]; rain(1:4,1:2)=[123.3 145.1; 87.1 871.4; 412.8 223.1; 23.3 45.5]; stid(1,1:8)=' QQQ'; stid(2,1:8)=' RRR'; stid(3,1:8)=' SSS'; stid(4,1:8)=' TTT'; fid=fopen(outname,'w'); tim=0; % とりあえず0でよい.指定した時間からずれる時に使用するらしい. nlev=1; % surfaceデータでは1. flag=1; % surfaceデータがあるときは1,それ以外は0. for tt=1:2 for ii=1:4 count=fwrite(fid,stid(ii,:),'char'); count=fwrite(fid,[lat(ii) lon(ii) tim],'float32'); count=fwrite(fid,[nlev flag],'int32'); count=fwrite(fid,rain(ii,tt),'float32'); end nlev=0; % 以下の出力は時間の区切りを示すので,nlev=0とする. % stidやlat,lonの値はここでは意味を持たない. count=fwrite(fid,stid(ii,:),'char'); count=fwrite(fid,[lat(ii) lon(ii) tim],'float32'); count=fwrite(fid,[nlev flag],'int32'); nlev=1; end fclose(fid);
このプログラムで出力されるstation.grdを読むctlファイルは次のようになります.
DSET ^station.grd DTYPE station STNMAP ^station.map TITLE Rainfall UNDEF -1.0e+10 TDEF 2 LINEAR jan1980 1mo VARS 1 v1 0 99 Rainfall ENDVARS
ただし,ctlファイルをopenする前に,次のコマンドをターミナル上で実行して,station.mapを 作成する必要があります.
$ stnmap -i station.ctl
次は2変数のsurfaceデータの場合ですが,プログラムは1変数の場合とほとんど同じです. 風速のデータを追加します.
outname='station.grd'; lat(1:4)=[34.3 44.2 22.4 33.4]; lon(1:4)=[-85.5 -84.5 -83.5 -82.5]; rain(1:4,1:2)=[123.3 145.1; 87.1 871.4; 412.8 223.1; 23.3 45.5]; wind(1:4,1:2)=[8.15 9.06; 1.27 9.13; 6.32 0.98; 2.79 5.47]; % 追加 stid(1,1:8)=' QQQ'; stid(2,1:8)=' RRR'; stid(3,1:8)=' SSS'; stid(4,1:8)=' TTT'; fid=fopen(outname,'w'); tim=0; nlev=1; % surfaceデータでは1. flag=1; for tt=1:2 for ii=1:4 count=fwrite(fid,stid(ii,:),'char'); count=fwrite(fid,[lat(ii) lon(ii) tim],'float32'); count=fwrite(fid,[nlev flag],'int32'); count=fwrite(fid,[rain(ii,tt) wind(ii,tt)],'float32'); % 変更 end nlev=0; count=fwrite(fid,stid(ii,:),'char'); count=fwrite(fid,[lat(ii) lon(ii) tim],'float32'); count=fwrite(fid,[nlev flag],'int32'); nlev=1; end fclose(fid);
ctlファイルは次のようになります.
DSET ^station.grd DTYPE station STNMAP ^station.map TITLE Rainfall UNDEF -1.0e+10 TDEF 2 LINEAR jan1980 1mo VARS 2 v1 0 99 Rainfall v2 0 99 wind speed ENDVARS
最後はレベルデータの場合です.レベルを0と100の2層に設定しています.
outname='station.grd'; lat(1:4)=[34.3 44.2 22.4 33.4]; lon(1:4)=[-85.5 -84.5 -83.5 -82.5]; level(1:2)=[0 100]; % レベルを2層とする wind1(1:4,1:2)=[123.3 145.1; 87.1 871.4; 412.8 223.1; 23.3 45.5]; wind2(1:4,1:2)=[8.15 9.06; 1.27 9.13; 6.32 0.98; 2.79 5.47]; stid(1,1:8)=' QQQ'; stid(2,1:8)=' RRR'; stid(3,1:8)=' SSS'; stid(4,1:8)=' TTT'; fid=fopen(outname,'w'); tim=0; nlev=2; % レベルを2層に設定. flag=0; % surfaceデータではないので0 for tt=1:2 for ii=1:4 count=fwrite(fid,stid(ii,:),'char'); count=fwrite(fid,[lat(ii) lon(ii) tim],'float32'); count=fwrite(fid,[nlev flag],'int32'); count=fwrite(fid,[rain(ii,tt) wind(ii,tt)],'float32'); count=fwrite(fid,[level(1) wind1(ii,tt)],'float32'); % 値をレベル毎に書き込む count=fwrite(fid,[level(2) wind2(ii,tt)],'float32'); end nlev=0; count=fwrite(fid,stid(ii,:),'char'); count=fwrite(fid,[lat(ii) lon(ii) tim],'float32'); count=fwrite(fid,[nlev flag],'int32'); nlev=2; end fclose(fid);
ctlファイルは次のようになります.
DSET ^station.grd DTYPE station STNMAP ^station.map TITLE Rainfall UNDEF -1.0e+10 TDEF 2 LINEAR jan1980 1mo VARS 1 v1 2 99 wind speed ENDVARS
GrADSでctlファイルを開いた後,レベルを指定する時には,
set lev 0 set lev 100
とします.ctlファイル内にレベルの値の情報は含まないのでやや不便です.