Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

Jupyter Notebookに外部拡張を導入する

今回はJupyter Notebookに外部拡張を導入する方法です。
例としてJavaScript製マップ活用ライブラリleaflet.jsのJupyter Notebook用拡張、ipyleafletをいれてみます。

実際のところ

環境導入

$ pip install ipyleaflet
$ jupyter nbextension enable --py --sys-prefix ipyleaflet

スクリプト本体

Cellに一個一個こんな感じで入力

from __future__ import print_function
from ipyleaflet import (
    Map,
    Marker,
    TileLayer, ImageOverlay,
    Polyline, Polygon, Rectangle, Circle, CircleMarker,
    GeoJSON,
    DrawControl
)
center = [34.6252978589571, -77.34580993652344]
zoom = 10
m = Map(center=center, zoom=zoom)
m

このノートブックを実行すると、以下のようになります
f:id:shuzo_kino:20180427220347p:plain

GeoJSONを読み込む

更に、leaflet.jsでGeoJSONデータを扱う - Bye Bye MooreでやったようにGeoJSON形式のデータをよろしく扱うことができます。
まず実験用にGithubのサンプルからデータを導入しときます。

$ curl -O https://raw.githubusercontent.com/jupyter-widgets/ipyleaflet/master/examples/demo.json

この状態で、マップを閉じる前あたりに以下のような感じでセルを追記

import json
with open('demo.json') as f:
    data = json.load(f)
g = GeoJSON(data=data)
m.add_layer(g)

こうすると、こうなります
f:id:shuzo_kino:20180427220255p:plain

消したい時はこうします

m.remove_layer(g)
g.close()

結果はそのままではPDF化できない

JavaScriptレンダリングしている関係で、TeXを経由するPDF出力には対応していません。
どうしても使いたい場合、静止画にして別途保存しないといけません。