📌

Plotlyで複数グラフのそれぞれにアノテーションをつけたい時の対処法

2022/05/17に公開

調べてもやり方が出てこなかったのでメモ。

複数グラフの表示法

複数グラフを表示するのは簡単だが、

make_subplots

を使えば良い。

コードは以下である。

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

fig = make_subplots(rows=1, cols=2,shared_xaxes=True,)
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 3, 5, 6, 7, 8],
    y=[0, 1, 3, 2, 3, 1, 2, 3, 5]),row=1, col=1)
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
    y=[0, 4, 5, 0, 2, 1, 3, 4, 2]),row=1, col=2)                       
fig.update_layout(showlegend=False)
fig.show()

しかしこの2つのグラフそれぞれに別々にアノテーション(注釈)をつけるにはどうしたら良いだろうか?

結論:xaxisとyaxisで指定しよう

たとえばそれぞれのグラフに矢印の「annotation1」と「annotation2」をつけてみる。

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

fig = make_subplots(rows=1, cols=2,shared_xaxes=True,)
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 3, 5, 6, 7, 8],
    y=[0, 1, 3, 2, 3, 1, 2, 3, 5],xaxis='x1',yaxis='y1'),row=1, col=1)
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
    y=[0, 4, 5, 0, 2, 1, 3, 4, 2],xaxis='x2',yaxis='y2'),row=1, col=2)
    
fig.add_annotation(x=7,y=3,ax=6,ay=4,text="annotation1",xref="x1",yref="y1",showarrow=True,\
axref="x1", ayref="y1",bordercolor="#c7c7c7")
fig.add_annotation(x=2,y=5,ax=3,ay=6,text="annotation2",xref="x2",yref="y2",showarrow=True,\
axref="x2", ayref="y2",bordercolor="#c7c7c7")

fig.update_layout(showlegend=False)
fig.show()

このように、

fig.add_trace(go.Scatter(~~),xaxis='x2',yaxis='y2'))

など、
それぞれのfigureにxaxis='x1',yaxis='y1'など名前をつけておく事で、fig.add_annotationに対して明示的にどのx軸なのかを渡す事が可能となる。

これで、それぞれのグラフに注釈をつける事ができた。

Discussion