📌
Plotlyで複数グラフのそれぞれにアノテーションをつけたい時の対処法
調べてもやり方が出てこなかったのでメモ。
複数グラフの表示法
複数グラフを表示するのは簡単だが、
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