GKSによる2次元グラフィックス

GKSによるデータの可視化の例: 地点気候データの散布図など

同じデータをいろいろな方法で図化してながめてみる例を、 GKSを使うFortranのプログラムで作ってみました。

データ kion [link]ame [link] は、 『理科年表』1990年版に収録された、日本の気象庁の編集による、 世界(日本を除く)437地点の気温と降水量を、わたしが本を見て入力したものです。 原則として1951年から1980年までの平均です。 本の表の注記は日本語でしたが、このファイルでは英語の略記にしてあります。 (ある表計算ソフトウェアで入力して固定長テキストファイルで書きだしたので、 項目間で文字のあいだに空白がないところもある、ちょっとわかりにくい形式になっています。) プログラムを実行するときは、この2つのファイルは datapath.fi の中で dapath という文字列で指定されたファイルパスの下の ディレクトリ/climate/rikanenp/ に置かれることを想定しています。 このファイルを読む手つづきを readrika.f [link] としました。

あとで地図をかくときにつかう、 海岸線のデータ coast.asc [link] と 国境線のデータ polit.asc [link] は、 NCAR Graphics (ただし、1985年のもので、 public domain )の 配布物にふくまれていたデータを、わたしがちょっとだけ編集したものです。 プログラムを実行するときは、この2つのファイルは datapath.fi の中で mppath という文字列で指定されたディレクトリに置かれることを想定しています。 このファイルを読む手つづきを rdmpsg.f [link] としました。

(1) sanmenzu.f(三面図) [link]

3つの次元をもつ量の表示の例として作ったものです。 3次元空間に分布する点を透視図のようにして見ることもできますが、 そこから定量的数値を読みとるのはむずかしいので、 2次元ずつの組み合わせを総あたりで作図するほうが役にたつことが 多いものです。ここで、軸を共通にすると見やすくなります。 この例では、気温と降水量のそれぞれに月ごとのデータがあるので、 月(month, むしろ正しくは時間で単位が月というべきでしょうが、 便宜上こうしておきます)と、気温(temperature)と降水量 (precipitation)の3次元データと考えることができます。

これを、

       図3(気温/降水量)     図2(気温/月)

       地点の説明            図1(降水量/月)
のような配置に作図します。Window座標関係の変数に m, t, pという 字を含めていることに注意してください。

降水量は 0 が絶対的意味をもつので、その季節変化の図は、棒グラフに してあります(棒は長方形ではなく線分)。 気温の季節変化と、気温と降水量の関係の図は折れ線グラフです。 いずれも、マーカーを重ねて入れるようにしました。 なお、気温と降水量の関係の図では、12月と1月の間をつなげて ありません。つなげる場合は、rmont, rmonvの配列の寸法を 12ではなく13にし、それぞれの13番めに1番めと同じ値を入れて、 GPL (polyline)の引き数のnも12ではなく13にすればいいです。

使い方は、標準入力から、選択する地点を1行にひとつずつ入れます。 1から437までの番号を、ふえる順に指定してください。 番号と地点の関係はデータファイルを見てください。 テキストファイル(例、titen)に作っておいて

./a.out < titen
のような使い方をするのがよいと思いますが、 もし、直接キーボードから入力する場合は、終わりは control-D です。


(2) kion100.f [link] と ame100.f [link]

1つの画面になるべく多くの地点の 気温または降水量の季節変化を表示しようとしたものです。 例では、100地点ぶんずつを表示しますが、地名や軸の文字が小さく なって読めないという欠点があります。 軸の寸法は sanmenzu.f の例と同じにしてあります。 標準入力から指定するものはありません。

気温(折れ線グラフ)

降水量(棒グラフ)


(3) kikotizu.f [link]

例、11月の降水量

地図上の気象観測点の位置に数字をプロットするものです。 気温と降水量のいずれを作図するか、また、何月の値あるいは年の値を 作図するかを選べるようにしました。(簡単なプロンプトを標準出力に 出しますので、数字で答えてください。) 地点の位置に数字とマーカーを重ねて出します。マーカーを省略する ことはプログラムをちょっと改造すれば可能です。

FMinLon, FMaxLon, FMinLat, FMaxLatで、対象とする経度と緯度の 範囲を指定しています。DATA文の値を変えてみてください。 ただし、有効な範囲は、経度は -180 と 180、緯度は -90と90の 間の実数型の値です。(Fortranでは定数に小数点を書かないと整数型と みなされるので注意)。

このプログラムの詳しい説明はしませんが、

* BEGIN
という行(これは文法的には意味のないコメント行にすぎないが)より前が 宣言部、あとが実行部であり、実行部は(日本語ローマ字のコメント文に 書いてあるとおり)
* "graphics" hazime
* daimei
* kaigansen to kokkyoosen
* waku to memori
* titen no iti ni suuzi o kaku
* owari
という手順になっていることに注意しておきます。

このままでは、アジアを中心とする地域について表示するようになって いますが、 地点間の距離が比較的近いところでは、数字が重なってしまうところもあります。 宣言部の最後にあるDATA文のうち、次の値を変えてみると、表示対象が変わ ります。編集して動かしてみてください。

*
      DATA FMnLon/  60./, FMxLon/ 180./, FMnLat/ -30./, FMxLat/  90./
           左端の経度     右端の経度     下端の緯度     上端の緯度
*
      DATA chsizw/ 0.015/, chsizv/0.015/
           (説明省略)      数字の大きさ     
*
このプログラムは、地図とはいっても、横軸に経度、縦軸に緯度をとった 直交座標(GKSのWC=「世界座標」)上にプロットしているにすぎません。 地図投影法 [地理情報学の教材参照] の用語では「正距円筒図法」というものにあたりますが、面積も角度も正しく ありません。

なお、海岸線、国境線は、緯度と経度の情報をデータファイルから 読みこみ、GPL(polyline)でかいています。


2000-04-26, 2005-08-10, 2020-08-17
増田 耕一 (MASUDA Kooiti)
[目次へ]