basemapbasemap
basemapというPythonから地図を表示するライブラリについて説明します。
basemapとは
basemapとは、Pythonから地図を表示するライブラリです。地図の表示をPythonから行う方法にはいくつかありますが、無料で使用できる物の一つにmatplotlibの一部であるbasemap(https://matplotlib.org/basemap/)というツールキットがあります。
Pythonでmatplotlibを使用している人は多いので、地図を利用するときにも、matplotlibの一部であるbasemapを利用するのがお手軽だと思います。
ただし、開発自体は、sourceforge(https://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/)を見る限り、2013年の1.0.7というバージョンで一区切り付いてしまっているようです。
なお、basemapのライセンスは、matplotlibのライセンス(https://matplotlib.org/users/license.html)が適用されます。
Anaconda3へのmatplotlibのインストールについて
筆者は、windows環境のレガシー系の機械学習では、Anaconda3を使うことが多いのですが、残念ながらbasemapはAnaconda3に含まれていません。
Anaconda3のコマンドであるcondaを使用してbasemapをインストールする場合に、やり方を間違えるとAnaconda3がダウングレードしてPython2がインストールされてしまったり、Anaconda Navigatorが起動しなくなったりと、いろいろな問題が発生する可能性があります。
問題が発生すると復旧するのに多くの時間を費やしてしまうので、インストールの方法について以下で説明します。
なお、使用した環境は、以下のものです。これ以外の環境では試していませんので、正しくインストールできるのかどうかは分かりません。
Windowsは64ビットのWindows 7と10のHomeとProfessionalで確認しています。
Anaconda3は、64ビットのAnaconda3-5.1.0-Windows-x86_64.exeというインストーラでインストールしています。2018年6月2日現在で、最新版は、Anaconda3-5.2.0-Windows-x86_64.exeとなっていますので、ひとつ前のバージョンで確認していることになります。
インストール方法は、
- Anaconda Promptを起動し、以下のコマンドを入力します。
- conda install -c conda-forge basemap
- conda install -c conda-forge basemap-data-hires
これで、インストールされるものは、https://anaconda.org/conda-forge/basemapにあるものがインストールされます。
Anaconda navigatorで確認すると、下のようになっており、確かにbasemapは、Anaconda Navigatorから認識されています。Basemapのバージョンは、1.1.0ということですので、sourceforgeに登録してあるものよりも新しいものがインストールされています。
basemapをインストールすると、mpl_toolkitsにもbasemapのプログラムがインストールされます。以下のプログラムでは、mpl_toolkitsのbasemapをimportして使用しています。
次に、basemapでどんなことができるかをお話しします。
いろいろなサイトにたくさんの例が出ていますので、そちらを参考にしていただくのも良いと思います。ここでは、ごく基本的な部分だけを紹介します。
上の画像は、下のプログラムで表示したものです。
下のプログラムでは、lonとlatで県庁所在地の緯度経度、hで県庁所在地の標高を表しています。
- ###########################################
- import matplotlib.pyplot as plt
- from mpl_toolkits.basemap import Basemap, cm
- fig = plt.figure(figsize=(12,12))
- # creates Basemap instance
- m = Basemap(projection='merc',
- resolution='i',
- llcrnrlon=128,
- llcrnrlat=30,
- urcrnrlon=147,
- urcrnrlat=46)
- m.drawcoastlines()
- lon = ([141.34694, 140.74, 141.1525, 140.87194, 140.1025,
- 140.36333, 140.46778, 140.44667, 139.88361, 139.06083,
- 139.64889, 140.12333, 139.69167, 139.6425, 139.02361,
- 137.21139, 136.62556, 136.22194, 138.56833, 138.18111,
- 136.72222, 138.38306, 136.90667, 136.50861, 135.86833,
- 135.75556, 135.52, 135.18306, 135.83278, 135.1675,
- 134.23833, 133.05056, 133.935, 132.45944, 131.47139,
- 134.55944, 134.04333, 132.76611, 133.53111, 130.41806,
- 130.29889, 129.87361, 130.74167, 131.6125, 131.42389,
- 130.55806, 127.68111])
- lat = ([43.06417, 40.82444, 39.70361, 38.26889, 39.71861,
- 38.24056, 37.75, 36.34139, 36.56583, 36.39111,
- 35.85694, 35.60472, 35.68944, 35.44778, 37.90222,
- 36.69528, 36.59444, 36.06528, 35.66389, 36.65139,
- 35.39111, 34.97694, 35.18028, 34.73028, 35.00444,
- 35.02139, 34.68639, 34.69139, 34.68528, 34.22611,
- 35.50361, 35.47222, 34.66167, 34.39639, 34.18583,
- 34.06583, 34.34028, 33.84167, 33.55972, 33.60639,
- 33.24944, 32.74472, 32.78972, 33.23806, 31.91111,
- 31.56028, 26.2125])
- lon, lat = m(lon, lat)
- h = [18.6, 2.6, 128.3, 47.4, 6.,
- 198.2, 66.9, 30.4, 120.9, 108.5,
- 15.8, 4.2, 41.3, 2.4, 3.6,
- 7.9, 5.6, 11.5, 269.9, 371.3,
- 8.2, 22.2, 14.3, 17.5, 95,
- 47.6, 14.9, 28.4, 90.3, 8.7,
- 4.8, 3.4, 5., 3.2, 48.2,
- 2.9, 3.8, 24.2, 4.2, 5.2,
- 5.1, 8.3, 19.3, 3.5, 4.6,
- 5.1, 8.5]
- im=m.scatter(lon,lat,alpha=0.7,s=50,
- c=h, edgecolors='k', linewidths=1.5,
- cmap=cm.s3pcpn)
- m.colorbar(im,location='bottom',pad="5%")
- plt.show()
15行目で呼び出しているm.drawcoastlines()を変更することによって、描画する地図を変えることができます。画像の上に書かれているのが、変更して呼び出す関数です。
basemapを使用することによって、地図を使用したいろいろな表現ができるので、いろいろと試してみられると良いと思います。