1.15. Plotly

 ここでは高度な図が作成できるPlotlyを紹介する。パソコンにそれほど詳しくない人はこの章は飛ばしてかまわない。

 すでにMatplotlibを使ったFigure作成を紹介したが、plotlyというモジュールを用いると、グリグリいじることのできるインターラクティブな美しい図を描画することができる。現在のところ、AnacondaではデフォルトでインストールされていないモジュールでJupyterLab 1.1.4ではAnaconda Navigatorからもインストールできなくなったようなので、自分でインストールする必要がある。インストールした後でrebuildに失敗するとJupyterLab自体が起動しなくなったりするので、これ以降はpipによるモジュールのインストールに関する知識がそこそこあって、自分で問題解決できる中級者向けに説明する。初心者でもチャレンジしたい人は試してみるとよい。
 まず、Anaconda Powershell Promptを起動し、ターミナルで
pip install plotly
とtypeしてインストールする。

 つぎに、plolyに必要なjavascriptのruntimeであるnodejsを公式(https://nodejs.org/en/)からダウンロードしてインストールする。

 さらにJupyterlabのExtension Mangerから、@jupyterlab/plotly-extensionjupyterla-dashをそれぞれインストールする。

(Juyperlab用のextenstionは、Anaconda Powershell Promptから
jupyter labextension install @jupyterlab/plotly-extension
とtypeしてインストールすることもできる。)

 実際にコードを書いていこう。まず以下のようにplotlyのモジュールをimportする。

In [1]:
import plotly.graph_objs as go
from plotly.offline import iplot, plot
import numpy as np
In [2]:
x = np.arange(-2, 2, 0.01)
y = np.sin(2*np.pi*x)

trace = go.Scatter(x=x, y=y)
iplot([trace])

 traceに名前をつけたり、ラインの太さを変えたりしたいときは以下のようにパラメータを付け加えていけばよい。また、ラインが複数ある場合は、traceの部分を複数作ってlistにする。

In [3]:
y2 = np.sin(2.5*np.pi*x) + 1.1
y3 = 1.2*np.cos(1.2*np.pi*x) - 1.2

trace2 = go.Scatter(x=x, y=y2, name='Trace2')
trace3 = go.Scatter(x=x, y=y3, name='Trace3', 
                    line=dict(width=4))
data = [trace, trace2, trace3]

 軸にラベルをつけたりしたいときは、layoutをdict型で指定する。texコマンドも使える。

In [4]:
layout = dict(title="Sine waves", 
              xaxis=dict(title='$x$'), 
              yaxis=dict(title='$y$'))
fig = dict(data=data, layout=layout)
iplot(fig)


 surface plotは特に美しく描画されるので例を挙げておこう。

In [5]:
import plotly.graph_objs as go
from plotly.offline import iplot, plot
import numpy as np
In [6]:
x = np.linspace(-1, 1, 100)*np.pi
y = np.linspace(-1, 1, 100)*np.pi
Y, X = np.meshgrid(x, y)
In [7]:
Z1 = np.cos(X)*np.sin(Y)
Z2 = 2 + np.cos(X)*np.sin(Y)
In [8]:
trace = go.Surface(x=X,y=Y,z=Z1)
data = [trace]
In [9]:
layout = dict(title="Surface plot", 
              xaxis=dict(title='$x$'),
              yaxis=dict(title='$y$'))
fig = dict(data=data, layout=layout)
In [10]:
plot(fig)
Out[10]:
'temp-plot.html'
In [11]:
iplot(fig)


当サイトのテキスト・画像の無断転載・複製を固く禁じます。
Unauthorized copying and replication of the contents of this site, text and images are strictly prohibited.
© 2019 Go Yusa