Plotly一行两列分面图如何指定注释所属的对应子图?
问题原因
Plotly 子图的坐标轴按创建顺序编号,第一列子图默认绑定xaxis/yaxis,第二列子图对应xaxis2/yaxis2。未指定坐标轴引用的注释会默认绑定到第一个子图的坐标轴,因此只会显示在第一列分面中。
解决方法
给每个注释字典添加xref和yref参数,指定其绑定的坐标轴即可:
- 要显示在第一列分面的注释,设置
'xref': 'x', 'yref': 'y'(也可以省略不写,默认就是该值) - 要显示在第二列分面的注释,设置
'xref': 'x2', 'yref': 'y2'
修改后代码示例
annots = [ # 第一列分面的注释 {'x': datetime.datetime(2021, 5, 5, 14, 4, 47, 398000), 'y': 125.5, 'text': '8', 'font': {'color': 'black'}, 'xref': 'x', 'yref': 'y'}, {'x': datetime.datetime(2021, 5, 5, 14, 4, 47, 545000), 'y': 123.5, 'text': '3', 'font': {'color': 'black'}, 'xref': 'x', 'yref': 'y'}, # 第二列分面的注释 {'x': datetime.datetime(2021, 5, 5, 14, 4, 47, 583000), 'y': 120.5, 'text': '9', 'font': {'color': 'black'}, 'xref': 'x2', 'yref': 'y2'} ] # 后续layout构建逻辑无需改动 layout = dict(showlegend=False, height=HEIGHT, annotations=annots, barmode='overlay', hoverlabel=hoverlabel, legend=legend, margin=margin, xaxis=xaxes1, xaxis2=xaxes2, yaxis=yaxes1, yaxis2=yaxes2) fig = go.Figure(data=data, layout=layout)
补充说明
如果你是通过plotly.subplots.make_subplots创建的分面图,调用fig.add_annotation()时直接传入row和col参数也可以自动绑定对应分面的坐标轴,底层逻辑和手动设置xref/yref完全一致。
内容的提问来源于stack exchange,提问作者Harxish
相关产品推荐
相关产品推荐

