ここでは高度な図が作成できる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-extension
とjupyterla-dash
をそれぞれインストールする。
(Juyperlab用のextenstionは、Anaconda Powershell Promptから
jupyter labextension install @jupyterlab/plotly-extension
とtypeしてインストールすることもできる。)
実際にコードを書いていこう。まず以下のようにplotlyのモジュールをimportする。
import plotly.graph_objs as go
from plotly.offline import iplot, plot
import numpy as np
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にする。
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コマンドも使える。
layout = dict(title="Sine waves",
xaxis=dict(title='$x$'),
yaxis=dict(title='$y$'))
fig = dict(data=data, layout=layout)
iplot(fig)
surface plotは特に美しく描画されるので例を挙げておこう。
import plotly.graph_objs as go
from plotly.offline import iplot, plot
import numpy as np
x = np.linspace(-1, 1, 100)*np.pi
y = np.linspace(-1, 1, 100)*np.pi
Y, X = np.meshgrid(x, y)
Z1 = np.cos(X)*np.sin(Y)
Z2 = 2 + np.cos(X)*np.sin(Y)
trace = go.Surface(x=X,y=Y,z=Z1)
data = [trace]
layout = dict(title="Surface plot",
xaxis=dict(title='$x$'),
yaxis=dict(title='$y$'))
fig = dict(data=data, layout=layout)
plot(fig)
iplot(fig)
当サイトのテキスト・画像の無断転載・複製を固く禁じます。
Unauthorized copying and replication of the contents of this site, text and images are strictly prohibited.
© 2019 Go Yusa