Plotlyとは?
Pythonのグラフ描画ライブラリーで描画したグラフの拡大縮小,軸のスケールの変更などなどができる.
Plotlyのグラフ描画モジュールにはexpressとgraph_objectsがあるらしいが,基本はgraph_objectsでexpressモジュールはサクッとグラフを書くためのモジュールで内部ではgraph_objectsの関数を呼んでいるらしい.(公式ドキュメントPlotly Express | Python | Plotlyの雑和訳)
今回はgraph_objectsでいい感じのグラフを色々書いてみる
expressでの描写はこちら→
ibetoge.hatenablog.com
線グラフ
基本的なグラフを描写してみる.とりあえず使うモジュールをインポートする.
import numpy as np import plotly.graph_objects as go
# データを用意 t = np.linspace(0, 2*np.pi, 10) sint = np.sin(4*t) ex = np.exp(t/np.pi) # グラフのインスタンス作成 fig = go.Figure(data=[ go.Scatter(x=t, y=sint, name=r'$\sin t$'), go.Scatter(x=t, y=ex, name=r'$e^t$') ]) # 動かせるグラフをブラウザーで表示 fig.show()
あとは,軸に名前をつけるのと,作成したグラフのインスタンスに新しいグラフを追加してみたい.
# グラフ追加 fig.add_trace(go.Scatter(x=t, y=t**2/4, name=r'$t^2/4$', mode='markers')) # ドットのみ fig.add_trace(go.Scatter(x=t, y=sint*ex, name=r'$e^t\sin t$', mode='lines')) # 線のみ fig.add_trace(go.Scatter(x=t, y=1/t, name=r'$1/t$', mode='lines+markers')) # ドットと線 # 軸の名前を追加 fig.update_xaxes(title="t") fig.update_yaxes(title=r"$f(t)$")
# 空のインスタンス作成 fig = go.Figure() # グラフ追加 fig.add_trace(go.Scatter(x=t, y=t**2/4, name=r'$t^2/4$')) fig.add_trace(go.Scatter(x=t, y=sint*ex, name=r'$e^t\sin t$')) fig.add_trace(go.Scatter(x=t, y=1/t, name=r'$1/t$' )) fig.show()
Plotlyのグラフをファイルに保存する
fig.show()
を用いると,実行した際に動かせるグラフがブラウザーに表示されるが,グラフをhtmlファイルとして保存したい場合は,
#htmlで保存 fig.write_html("figure.html")
でOK.画像ファイルとして保存するには,kaleidoパッケージが必要なので,次のどちらかのコマンドを叩いてkaleidoをインストールする.(kaleidoの代わりにorcaパッケージでも良いらしいが非推奨)
pipの場合
pip install -U kaleido
anacondaの場合
conda install -c conda-forge python-kaleido
kaleidoをインストールしたら,
#pngで保存 fig.write_image("figure.png") #jpegで保存 fig.write_image("figure.jpeg")
と書けばすれば良し.こうすれば保存したhtmlファイルをブラウザで開けばいつでも動かせるグラフが見られる.もちろん画像ファイルとして保存した場合は動かせない.
棒グラフとは円グラフとかも書こうと思ったけど疲れたからここまで
ソースコード
いろいろな線グラフ
import numpy as np import plotly.graph_objects as go # データを用意 t = np.linspace(0, 2*np.pi, 100) sint = np.sin(4*t) ex = np.exp(t/np.pi) # グラフの空インスタンス作成 fig = go.Figure() # グラフ追加 fig.add_trace(go.Scatter( x=t, y=t**2/4, name=r'$t^2/4$', mode='markers')) # ドットのみ fig.add_trace(go.Scatter(x=t, y=sint*ex, name=r'$e^t\sin t$', mode='lines')) # 線のみ fig.add_trace(go.Scatter(x=t, y=1/t, name=r'$1/t$', mode='lines+markers')) # ドットと線 # 軸の名前を追加 fig.update_xaxes(title="t") fig.update_yaxes(title=r"$f(t)$") # 動かせるグラフをブラウザーで表示 fig.show() #htmlで保存 fig.write_html("figure.html") #pngで保存 fig.write_image("figure.png")