4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで世界地図-14(都道府県を着色する)

Last updated at Posted at 2018-07-10

Pythonで世界地図(cartopy版)を使って、mpl_toolkits.basemapの日本地図に都道府県別に着色できないかやってみましたが、出来ないのでライブラリjapanmapでやってみました。

japanmapのインストール

$ pip install japanmap

japanmap(県別データの可視化)
https://qiita.com/SaitoTsutomu/items/6d17889ba47357e44131

#!/usr/bin/python3
# coding: UTF-8

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from japanmap import get_data
from japanmap import pref_points

#japanmapで境界線のベクトルデータを取得
qpqo = get_data()
pnts = pref_points(qpqo)
b_data = pnts[0] #0-北海道、1-青森・・・(都道府県コード - 1)

lon1 = 137.0
lat1 = 37.0
lon2 = 10.0
lat2 = 10.0

fig = plt.figure()
ax = plt.axes()

map = Basemap(llcrnrlon = lon1 - lon2, llcrnrlat = lat1 - lat2, urcrnrlon = lon1 + lon2, urcrnrlat = lat1 + lat2, resolution = 'i', projection='cyl')

map.drawcoastlines() #海岸線

#japanmapで都府県境界線を表示
qp, qo = get_data()
for k in range(len(qo)):  # 各県ごと
    for othr, ls in qo[k]:  # 各線分ごと
        if othr > k:  # 県コードkが小さい県のとき
            plt.plot([qp[i][0][0] for i in ls], [qp[i][0][1] for i in ls],color = 'r',linewidth = 0.5,linestyle = '--')

poly = plt.Polygon(b_data,fc="#7700"+"ee") #都道府県を塗りつぶす
ax.add_patch(poly)

plt.show()

image.png

japanmapとmpl_toolkits.basemapでは海岸線の座標のとり方が違うので、resolution = 'l','c'では着色部と海岸線に隙間が目立ちます。

resolution = 'l'の場合

image.png

resolution = 'f'の場合

image.png

###全ての県に色を付ける

#!/usr/bin/python3
# coding: UTF-8

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from japanmap import get_data
from japanmap import pref_points

#japanmapで境界線のベクトルデータを取得
qpqo = get_data()
pnts = pref_points(qpqo)

lon1 = 137.0
lat1 = 37.0
lon2 = 13.0
lat2 = 13.0

fig = plt.figure()
ax = plt.axes()

map = Basemap(llcrnrlon = lon1 - lon2, llcrnrlat = lat1 - lat2, urcrnrlon = lon1 + lon2, urcrnrlat = lat1 + lat2, resolution = 'i', projection='cyl')

map.drawcoastlines() #海岸線

#japanmapで都府県境界線を表示
qp, qo = get_data()
for k in range(len(qo)):  # 各県ごと
    for othr, ls in qo[k]:  # 各線分ごと
        if othr > k:  # 県コードkが小さい県のとき
            plt.plot([qp[i][0][0] for i in ls], [qp[i][0][1] for i in ls],color = 'k',linewidth = 0.5,linestyle = '--')

#都道府県に色を付ける
color2 = 0
for i in range(47):
    
    color2 += (1250067 + 150) #50,100,150 ←加算している、この数値を変更すると色が変わる
    if color2 > 16250870:
        color2 -= 15527148
    fc1 = hex(color2)
    fc1 = fc1[2:] #0xを削除
    fc1 = '#' + fc1.zfill(6) #6桁になるように0で埋めてから、先頭に"#"を追加
    poly = plt.Polygon(pnts[i],fc =  fc1) # pnts[0] #0-北海道、1-青森・・・(都道府県コード - 1)
    ax.add_patch(poly)

plt.show()

image.png

japanmapでは北海道本島・本州本島・四国本島・九州本島・沖縄本島の5つの島しか着色できないようです。(やり方がわからないだけかも?)
佐渡ヶ島・淡路島・対馬等の大きな島も着色出来ません?。

隣の県と区別がつくように色を変えよううと思いましたが、
どのようにしてよいのかよくわかりません。私がわかる範囲で作成しました。
最初は他の人のコードを見てやろうと思いましたが、スキル不足で???

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?