Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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出力には対応していません。
どうしても使いたい場合、静止画にして別途保存しないといけません。