如何在Python的Plotly Express图例中添加hline并标注为'mean'
当然可行!给Plotly水平参考线添加图例标注的方法
你提到的需求完全可以实现,核心原因是add_hline添加的是布局层面的形状(shape),默认不会出现在图例里。我们可以换一种方式:用数据 trace来绘制水平线,这样就能自动在图例中显示,还能自定义标注文本。
下面是修改后的完整代码,完美实现你的需求:
import numpy as np import pandas as pd import plotly.express as px import plotly.graph_objects as go df = pd.DataFrame({'day': np.repeat(np.arange(1, 11, 1), 2), 'value': np.repeat([1, 2, 3, 4, 5], 4), 'var': list(['A', 'B']) * 10}) fig = px.bar(df, x='day', y='value', color='var') mean_val = df['value'].mean() # 用Scatter trace创建水平线,自动加入图例 fig.add_trace(go.Scatter( x=[df['day'].min(), df['day'].max()], # 覆盖x轴全部范围 y=[mean_val, mean_val], mode='lines', line=dict(dash='dot', color='black'), # 和原hline样式保持一致 name='mean' # 图例中显示的标注文本 )) fig.show()
关键细节说明:
- 用
go.Scatter创建的水平线属于数据 trace,Plotly会自动将其纳入图例,name参数就是图例中显示的文本。 - 通过
line=dict(dash='dot', color='black')可以完全匹配原add_hline的样式,你也可以根据需要调整颜色、线宽等。 - 如果后续调整了x轴范围,也可以把x的取值改成
fig.layout.xaxis.range来自动适配最新的x轴区间:x_min, x_max = fig.layout.xaxis.range fig.add_trace(go.Scatter( x=[x_min, x_max], y=[mean_val, mean_val], # 其他参数不变 ))
内容的提问来源于stack exchange,提问作者mf17
相关产品推荐
相关产品推荐

