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ファイル内にレベルの値の情報は含まないのでやや不便です.