地理的分布をもつデータから情報を読みとるには、地図上に表示するのが 効果があることが多い。
社会現象の統計データは、行政区画別に得られることが多い。 このように、領域ごとに数値が対応する情報を表示するのに、 領域を、適当な色あるいは模様で塗り分けるという方法がある。 専門用語で、コロプレス(choropleth)という。 このような方法の表示に適している量は、面積あたりの量である。 (行政区画が合併したり、分割されたりしても、対象となる現象が変化しな ければ、図の特徴は基本的に変わらないようにするべきであるから。) しかし、必要にせまられて、面積あたりでない量を塗り分け表示することが あるので、見るときには、直観的印象が必ずしも定量的情報を反映している とは限らないことに注意しなければならない。
こういう地図は、かなり昔から手作業で作られていたが、計算機で作図する ようにした初期の例として、久保幸夫先生が 1980年ごろに作った日本の分県地図のプログラムがある。 [参考文献: 久保幸夫、1983: グラフィックプログラムALIS利用の手引き。 東京大学大型計算機センター。] その例文の図として、 1977年の人口あたりの工業生産額(単位: 百万円/年)が 表示されていた。
ここでは、図形出力部分を、GKSのGFA (fill area)を使って、
同様な県別塗り分けのプログラムを作ってみた。
kenbetu.f
[link] は、
ファイル名を標準入力から読み、そのファイルからデータを
読んで塗り分ける。
本来は地図投影も考えるべきであろうが、今のところ、単純に
横軸に経度、縦軸に緯度をとって表示することにした。
地図投影の用語で言えば、「正距円筒図法」である。
塗り分けで表現される数値データとしては、
1977年の各都道府県の人口あたりの工業生産額(『日本国勢図会』にのっている数値から計算)を、
prod77.dat [link]として用意した。
また、塗り分けの階級の数 (例として、5)と、
階級の境の数値 (両端は無限とみなすことにしたので4個の数値)を、
prod77.cla [link]というファイルから
あたえることにした。
プログラムを実行するときは、この2つのファイルは、
datapath.fi
の中に dapath
という文字列で指定されたファイルパスの下の
kenbetu
というディレクトリに置かれることを想定している。
海岸線と県境の緯度・経度データは、東大地震研究所の
小竹美子さんによるものである。
ただし、このデータセットは線の通る位置の情報だけだったので、
県ごとの多角形の情報の形になおす作業はわたしが行なった。
今のところ、各県ごとに1つの多角形領域だけを塗り分けの対象にしており、
小さい島や湖などについても線データはあるが使っていない。
このデータセットは多数のファイルからなるが、zipでまとめて、
mapjapan.zip
[link] としてある。
これを展開すると、mapjapan
というディレクトリの中にファイルが置かれる。
プログラムを実行するときは、この地図データは、
datapath.fi
の中に mjpath
という文字列で指定された
ディレクトリに置かれることを想定している。
(現在のdatapath.fi
の内容では、mjpath
は、
dapath
の下の mapjapan
と同じになっている。)
結果の図は次のようになる。
ところで、久保(1983)のプログラムでは、読みこむ座標値は、 ある地図上でのx, y座標であって、地球上の緯度・経度ではなかった。 (沖縄や奄美諸島は表示の通り左上の位置になっており、実際の南西の位置になっていなかった。) 今ならば、緯度・経度の情報を持っていて表示のときに地図投影の計算を するところだが、1980年ごろの計算機事情では、 多角形を構成する各点ごとに地図投影の座標変換の計算(多くの場合三角関数を含む)をするのがもったいない という判断をしたのも当然と思う。
なお、NCAR Graphicsの中には、GKSのGFAを応用して、世界の国別の塗り分け をするプログラムが含まれている。 ただし、NCAR Graphicsライブラリの中にコンパイルされているものを 含めると、かなり巨大なプログラムになっており、わたしもその論理構成を よく理解しているわけではない。 プログラム例は、
ncargex eezmpaで、実行してみることができる。 メインプログラム eezmpa.f が 現在のディレクトリに残るので、これを改造して、数値データを読んで それに応じて塗りわけるプログラムを作ることはむずかしくないはずである。 ただし、この例文で表示される地図の国境線はソ連の解体・ドイツの統一以前のものである。 NCAR Graphicsには新しい国境線のデータもあるが、 それを使うためには例文プログラムをかなり改造する(違うサブルーチンを呼ぶ)必要があり、 わたしはまだためしていない。