S0-ma's Blog

s0-maのブログです。

Python+jupyter+plotlyでインタラクティブなグラフを書いてみた

Abstract

jupyter notebook上でPlotlyというグラフライブラリを使い、3次元データをインタラクティブに可視化してみました。

Introduction

Pythonでグラフライブラリと言うと、真っ先に出てくるのがmatplotlib。 ただやはり、グラフを描画することに特化しているのか、プロットしたものをズームするとかマウスオーバーで値を表示とかがサクッとはできないみたい。 そんな中で、Plotlyという良さげなライブラリを見つけたので試してみた。

Setup and Results

Plotlyのインストール。

pip install plotly

プロットする内容

プロットする関数自体は、以前の記事と全く同じ。 あと折角なので、自作したfloat拡張range関数も使ってみた。

コード

import math
from plotly.offline import iplot, init_notebook_mode
import plotly.graph_objs as go

init_notebook_mode(connected=True) 

x = [_x for _x in drange(0, math.pi, math.pi/100)]
y = [_y for _y in drange(0, math.pi, math.pi/100)]
z = []

for _y in y:
    z.append([])
    for _x in x:
        z[-1].append(math.sin(3*_x) * math.sin(2*_y))
        
data = [
    go.Heatmap(
        x=x,
        y=y,
        z=z,
        colorscale='jet',
    )
]

iplot(data)

実行結果

カーソル位置のデータ値を表示したり、ズームやオートスケールがブラウザ上のUI操作で可能。 f:id:s0-ma:20190209225542g:plain:w560

Conclusion

jupyter上で使うなら、matplotlibよりこちらのほうが好みかも。デモもいろいろあるようなので、そのうち試してみようと思います。

Reference

github.com

plot.ly