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()
japanmapとmpl_toolkits.basemapでは海岸線の座標のとり方が違うので、resolution = 'l','c'では着色部と海岸線に隙間が目立ちます。
resolution = 'l'の場合
resolution = 'f'の場合
###全ての県に色を付ける
#!/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()
japanmapでは北海道本島・本州本島・四国本島・九州本島・沖縄本島の5つの島しか着色できないようです。(やり方がわからないだけかも?)
佐渡ヶ島・淡路島・対馬等の大きな島も着色出来ません?。
隣の県と区別がつくように色を変えよううと思いましたが、
どのようにしてよいのかよくわかりません。私がわかる範囲で作成しました。
最初は他の人のコードを見てやろうと思いましたが、スキル不足で???