Python

【plotlyレイアウト応用編】<>Annotation活用

Annotationでできること

Annotationは注釈という意味があり、plotlyではグラフの好きな位置に数値や文字列などのテキストを表示させるオプションのことを指します。

本記事では画像中央のグレーで囲まれた数値の注釈を表示させる方法について解説していきます。

データ準備

このようなデータが準備できればOKです。

必要なライブラリをインポート

各種必要なライブラリをインポートします。

import pandas as pd
import plotly.graph_objects as go
import plotly.io as pio

エクセルデータを読み込みます。

df= pd.read_excel('生産実績.xlsx')

2軸のグラフを作成する

まずは土台となるグラフの作成です。

詳細は以下を参考にしてから本記事を読むと理解が進みます。

【plotlyチュートリアル】>2軸のグラフ作成 本記事ではPythonのグラフライブラリとして使えるplotlyによる「2軸のグラフ」作成について紹介します。 実践で使えるようなEx...
trace1=go.Bar(x=df['日'], y=df['Aグループ生産量'],text=df['Aグループ生産量'],name='Aグループ生産量',
              yaxis='y1',textposition="inside",marker_color='rgb(0,113,188)')
trace2=go.Bar(x=df['日'], y=df['Bグループ生産量'],text=df['Bグループ生産量'],name='Bグループ生産量',
              yaxis='y1',textposition="inside",marker_color='rgb(193,145,0)')
trace3=go.Scatter(x=df['日'], y=df['良品率'],text=df['良品率'],name='良品率',
              yaxis='y2',marker_color='rgb(51, 153, 51)',mode='lines+markers+text',textposition='top right')

アノテーションを使ったレイアウトの調整

ここからが本題のレイアウト変更です。

annotations以降のdict(辞書型)で注釈の詳細を決めていきます。

font(フォント)、borderwidth(ボーダーラインの太さ)、borderpad(文字とボックス縁の間の余白)、bgcolor(背景色)、opacity(不透明度)などが調整できます。

layout = go.Layout(
    title='各グループの生産量と良品率',
    xaxis = dict(title = '日付', showgrid=False,dtick=1), 
    yaxis = dict(title = '生産量(個)', side = 'left', showgrid=False, range = [0, 3500]), 
    yaxis2 = dict(title = '稼働率(%)', side = 'right', overlaying = 'y', range = [0, 100], showgrid=False,tickfont=dict(color='rgb(51, 153, 51)')),
    barmode='stack',
    annotations=[
    dict(
        x=df.iat[i,2],
        y=df.iat[i,5],
        xref="x",
        yref="y",
        text=str(df.iat[i,5]),
        font=dict(
            family="Courier New, monospace",
            size=16,
            color="#ffffff"
            ),
        borderwidth=1,
        borderpad=2,
        bgcolor='black',
        opacity=0.7
    )for i in range(len(df))
    ],
    )

実際に表示してみましょう。

fig= dict(data = [trace1,trace2,trace3], layout = layout)
pio.write_html(fig,file='2軸-1.html')

HTNL表示

その他のオプションについて

plotlyの公式においてもアノテーションについて解説があります。

例えば矢印を追加したい場合はshowarrow=Trueで設定できます。

コードは以下の通りです。

fig.add_annotation(
        x=2,
        y=5,
        xref="x",
        yref="y",
        text="max=5",
        showarrow=True,
        font=dict(
            family="Courier New, monospace",
            size=16,
            color="#ffffff"
            ),
        align="center",
        arrowhead=2,
        arrowsize=1,
        arrowwidth=2,
        arrowcolor="#636363",
        ax=20,
        ay=-30,
        bordercolor="#c7c7c7",
        borderwidth=2,
        borderpad=4,
        bgcolor="#ff7f0e",
        opacity=0.8
        )

以上で解説は終わりです。

Plotlyに関する書籍紹介

↓Plotlyについて学べる数少ない参考書です。

Mickey@コーヒー好きエンジニア

【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|ココナラではプログラミングに関する相談,就職/転職やコーヒーに関する相談などのサービスをやっています