You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:40:18