こんにちは。昨夜の大雨から一転して真夏の気候で大変ですね。外出時には日傘必須です^^;

 

地図を人口の大小に応じて色分けする

さて、前回の記事「JSONファイルをCSVファイルに変換する」で作成したJSONファイルを使って、横浜市地図を改めて描きます。行政区毎の人口数の大小に応じて、地図を色塗りします。

 

地図を描画する

早速完成した地図です♪画像をクリックしてくださいね^^

yokohama_map08

 

人口が多い区は濃く、少ない区は薄い色に指定してみました。

 

元のソースコードはこちら。

index.html

 

L.84-93で、区毎の人口数の最大値と最小値を計算しています。

冗長過ぎるコードなので、すっきり直したいですが。

 

L.116-で、各区領域にclass属性を指定しています。

 

続いてL.126-で色塗りしています。

D3.jsの機能を使って、色を人口に応じて求める関数を作成します

areaGrad = d3.scale.linear().domain([target_min, target_max]).range(["#bee59e", "#349946"]);

d3.scale.linear()は、リニアに補間した結果を返す関数を作成するもので、f = d3.scale.linear()domain([x1, x2]).range([y1, y2])とすると、f(x)は下図のように補間した値yを返してくれます。

d3_scale_linear

 

さらに、range()には16進数RGB colorも指定できるという優れもので、range([薄い緑, 濃い緑])を指定しました。

domainには、先ほど求めた人口の最小値&最大値を指定してありますので、

d3_scale_linear_ex_2x

 

という感じで、L.131でfill指定する色を返してくれます。

 

色塗り完成です♪

次回は、人口の数値自体を地図に書き入れる処理を追加したいと思います。