basemapインストール
https://matplotlib.org/basemap/
Anacondaを使っていれば下記。
conda install -c anaconda basemap
これで、何かお試しでプログラム動かすと、
AttributeError: 'AxesSubplot' object has no attribute 'get_axis_bgcolor'
というエラーが出る可能性がある。このエラーが出た場合には、
/Users/anaconda3/lib/python3.6/site-packages/mpl_toolkits/basemap/init.py
の中のget_axis_bgcolorをget_fcに自分で直さないといけない。
地図作成
今回は、例として100名山および自分が踏破した山をプロットすることにする。
インプットデータ
こういう感じのcsvファイル(100meizan.csv)を用意する。memoを1とすることで踏破、未踏破を分ける。
プログラム
from mpl_toolkits.basemap import Basemap
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# csvファイルの読み込み
df=pd.read_csv('100meizan.csv')
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
m = Basemap(projection='cyl',
resolution='h',
llcrnrlon=125,
llcrnrlat=29,
urcrnrlon=147,
urcrnrlat=46)
m.drawcoastlines(color='lightgray')
m.drawcountries(color='lightgray')
m.drawmeridians(np.arange(125., 147., 2.), labels=[1, 0, 0, 1],
dashes=[1, 1], linewidth=0.25, color='0.5')
m.drawparallels(np.arange(29, 46, 2), labels=[1, 0, 0, 1],
dashes=[1, 1], linewidth=0.25, color='0.5')
m.fillcontinents(color='black')
for i in range(100):
x,y=m(df.Lon[i],df.Lat[i])
if df.memo[i]==0:
#未踏破
m.plot(x,y,'c^',markersize=df.Hight[i]/200.,mec='white',alpha=0.5)
else:
#踏破
m.plot(x,y,'r^',markersize=df.Hight[i]/200.,mec='white',alpha=0.5)
# 長野あたりがごちゃごちゃしているので、拡大して別窓に表示
axins = zoomed_inset_axes(ax, 2.5, loc=2)
axins.set_xlim(137, 140)
axins.set_ylim(34,38)
plt.xticks(visible=False)
plt.yticks(visible=False)
map2 = Basemap(projection='cyl',resolution='h',llcrnrlon=137,llcrnrlat=34,urcrnrlon=140,urcrnrlat=38, ax=axins)
map2.drawcoastlines(color='lightgray')
map2.drawcountries()
for i in range(100):
x,y=map2(df.Lon[i],df.Lat[i])
if df.memo[i]==0:
map2.plot(x,y,'y^',markersize=df.Hight[i]/200.,mec='white',alpha=0.5)
else:
map2.plot(x,y,'r^',markersize=df.Hight[i]/200.,mec='white',alpha=0.5)
plt.show()