🐍

Matplotlbの上位互換??Plotlyの基本操作

2022/05/28に公開約2,800字

Plotlyとは

Matplotlibと同じようにグラフを描画するnotebook形式と相性のよいグラフ作成パッケージ.
matplotよりもきれいなグラフが作成可能+インタラクティブな形式なのでシンプルに上位互換(だと思う..).
plotly大きく分けて2通りの記述が可能.

  • plotly.express:少ない記述で気軽にグラフを作成できるためとりあえずグラフで見てみたい時とかに脳死で突っ込めばそれっぽいのができる.一方で,拡張性は低く思い通りのグラフにできないことも多い?(そこまで使い込んだわけではないので軽く触った印象ですが)
  • plotly.graph_objs:コーディング量は増えるが,expressでできることは全てカバーしてるので,最初からこっちを覚えておく方が何かと便利.

グラフの作成方法

共通知識

ヒストグラムでも折れ線グラフでも散布図でも以下の2つをimportしておけば大体全部対応できる

import plotly.graph_objs as go
from plotly.subplots import make_subplots

グラフの作成手順

基本的にどんなグラフや表を作成するときも以下の3つの手順で作成していく.

1. グラフを描画するためのキャンバスを用意する

fig = go.Figure()

2.グラフを描画する

fig.add_trace(
    # go.Scatter(), go.Bar(), go.Heatmap(), etc...
)

3.グラフの体裁を整える(省略可)

# 文字とか余白とか背景とか全般の体裁
fig.update_layout(
    # title="hoge", xaxis_title="hoge",
    # plot_bgcolor="#ffffff", margen=dict(t=10,b=10,l=5,r=5), # etc...
)
# x軸に関する体裁
fig.update_xaxis(
    # showline=True, linewidth=1,
    # linecolor='#aaaaaa', gridcolor='#ffffff', etc...
)
# y軸に関する体裁
fig.update_yaxes(
    # showline=True, linewidth=1,
    # linecolor='#aaaaaa', gridcolor='#ffffff', etc...
)

fig.update_traces()なんてのもあるけどadd_traceで指定してるので使ったことない.ネットの記事でちらちら見かけるけど,pxの後に使ってる印象.

Bar chart

import pandas as pd

df = pd.read_csv("hogehoge.csv")

# グラフの作成
fig = go.Figure()
fig.add_trace(go.Bar(x=df.columns, 
                     y=df.loc["ave"],        # グラフにしたい行
                     text=df.loc["ave"],    # グラフにしたい行
                     texttemplate='%{text:.03f}',
                     textfont={"size":15},
                     marker_color='steelblue'))
fig.update_layout(title_text="Bar Chart", 
                  plot_bgcolor="#ffffff",        # あっても邪魔なので白に
                  margin=dict(t=40, b=10))       # 余白の大きさ(好みで)
fig.update_xaxes(showline=True, 
                 linewidth=1, 
                 linecolor='#aaaaaa', 
                 gridcolor='#ffffff')
fig.update_yaxes(showline=True, 
                 linewidth=1, 
                 linecolor='#aaaaaa', 
                 gridcolor='#aaaaaa')

Confusion Matrix

from scikit-learn.metrics import confusion_matrix

# confusion matrixの作成
normalize = True
cm = confuision_matrix(y_true, y_pred)
if normalize:
    cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
  
# グラフの作成
fig = go.Figure()
fig.add_trace(go.Heatmap(z=cm,
                         x=label,
                         y=label,
                         text=cm,
                         texttemplate="%{text}",
                         textfont={"size":15},
                         colorscale="Blues",
                         colorbar = dict(x=0.27)))
fig.update_xaxes(title="Predict")
fig.update_yaxes(title="True", 
                 autorange="reversed")

Discussion

ログインするとコメントできます