竹広様: 樫村です。 gpview の修正と改造をいくつか行ったので、本家導入をご検討いただけたら幸いです。 パッチと適用後のファイルを添付します。 以下の6点にまとめて対応したパッチなので、見づらいかも知れませんがご容赦ください。 1】 --tone [a | e | f | b | c] オプションが効かない問題 ・781行目 if ($OPT_tone) 以下の変数名と draw関数内での変数名が異なっており、--toneオプションが機能していませんでした。 2】1度に複数枚描く(--anim 除く)ときに絵が徐々に上にずれる問題(これは仕様なのかもしれませんが) ・[> gpview T.nc@T U.nc@U] などのように複数のgturlを与えて、連続して絵を描いたときに、 GGraph.margin_info が複数回呼ばれ、この中で、DCL.slmgn(xl, xr, yb, yt) が何度も呼ばれるのが原因のようです。 回避策として、$flag_marginを用意して、2回目からは DCL.slsttl(gturl, 'b', 1.0, -1.0, 0.008, 2) だけ呼んで 右下のマージンinfoを更新するようにしました。 ただし、この場合、文字の高さが固定(GGraph.margin_infoでは文字数が多い場合に調節している)なので、美しくないです。 本来はGGraph.margin_infoが複数回呼ばれてもよいようにすべきかも知れません。 3】差をとるオプション(--diff)の追加 ・[> gpview T1.nc@T T2.nc@T --diff] などとするとT1.ncとT2.ncの差を計算して表示するようにしました。 与えるgturl は偶数でなければなりません。[> gpview {T1,T2,T3,T4}.nc@T —diff] は T1 - T2 と T3 - T4 を表示します。 4】変数名を省略可能に ・@変数(または--var)がない場合に、ファイル内の変数(軸除く)を読み取って、@変数を補うようにしました。 例えば [> gpview T1.nc] だけで描画されます。[> gpview T1.nc,lon=0] なども可。 また、1つのファイルに複数の変数が入っている場合は、全ての変数を順々に描画します。 5】描画範囲指定時の軸の一般名 ax0, ax1,…を導入 ・描画の範囲指定するときに、正確な軸名を(調べて)入力するのが手間なので、 ax0で第0軸、ax1で第1軸、… に置き換わるようにしました。 関数 find_axisnames(gturl) として実装。"ax” 部分はプログラム冒頭で定数AXで定義しているので、 “ax”という文字列が問題有りなら、ここを変えるだけで対応できます。 6】上述の軸の一般名 ax0, ax1,...を mean, stddev, eddy, anim でも使用可能に ・これらのオプションは既に数字(0, 1, 2,..)で軸を指定できますが、ax0なども 使えたほうが気持ちいいかと思いましたので、実装しました。 以上。 これらは地球システムモデルの出力データとERAなどの再解析データを比較する際の手間を減らすために導入しました。 モデルデータと ERAで変数名や軸名が違ったり、軸名がGTLON128とかSTDPL18やECMANLP23などと長かったりしたので、 【4〜6】を導入してみました。 例えば、モデルデータが model/ 再解析データが era/ というディレクトリにあれば、 [> gpview {model,era}/u,ax2=10 --diff] などで10hPa面の差分が描けるようになります。 ご検討いただけたら幸いです。
Attachment:
gpview.patch
Description: Binary data
Attachment:
gpview_mod
Description: Binary data
樫村(山本)博基 hiroki@xxxxxxxxxxxxxx