LoginSignup
12
13

More than 5 years have passed since last update.

basemapを使って自分用地図作成

Posted at

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とすることで踏破、未踏破を分ける。
image.png

プログラム

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()

結果

image.png

12
13
0

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
12
13