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

Python Plotly go.Bar设置textposition属性不生效问题

问题根因

textposition参数仅控制文本标签的显示位置,无法单独触发标签渲染,你当前代码存在两个问题导致标签不显示:

  • 柱状图(go.Bar)未传入text属性指定要展示的数值内容,Plotly 没有可渲染的文本对象
  • 折线图(go.Scatter)默认渲染模式仅包含线条、标记,未开启文本渲染模式,且同样未传入text属性指定要展示的百分比数值
修正方案
  1. 提前计算好毛利率、净利率字段,避免重复计算
  2. 为所有柱状图、折线图trace补充text属性,传入需要展示的数值,可按需配置texttemplate格式化数值显示样式
  3. 为折线图trace的mode参数添加text枚举值,开启文本渲染能力
  4. 可选配置:统一文本最小字号,调整两个折线的标签位置避免重叠,防止标签被自动隐藏
修正后核心代码
# 提前计算毛利率、净利率
try:
    df['GPM'] = (df['Gross Profit'] * 100 / df['Total Turnover']).round(2)
except KeyError:
    print('No GP')
df['NPM'] = (df['Net Profit'] * 100 / df['Total Turnover']).round(2)

fig = make_subplots(specs=[[{"secondary_y": True}]])

# 营收柱状图
fig.add_trace(go.Bar(
    name='Revenue', 
    x=df['Closing Date'], 
    y=df['Total Turnover'],
    base=0,
    text=df['Total Turnover'],
    textposition="inside",
    texttemplate='%{text:,.2f}' # 格式化数值为千分位分隔、保留2位小数
),secondary_y=False)

# 净利润柱状图
fig.add_trace(go.Bar(
    name='Net Profit', 
    x=df['Closing Date'], 
    y=df['Net Profit'],
    base=0,
    text=df['Net Profit'],
    textposition="inside",
    texttemplate='%{text:,.2f}'
),secondary_y=False)

# 毛利率折线
try:
    fig.add_trace(go.Scatter(
        x=df['Closing Date'], 
        y=df['GPM'], 
        name="GPM%",
        mode='lines+markers+text',
        text=df['GPM'].astype(str) + '%',
        textposition="bottom center"
    ),secondary_y=True)
except NameError:
    print('No GP')
    
# 净利率折线
fig.add_trace(go.Scatter(
    x=df['Closing Date'], 
    y=df['NPM'], 
    name="NPM%",
    mode='lines+markers+text',
    text=df['NPM'].astype(str) + '%',
    textposition="top center" # 标签移到点位上方,避免和毛利率标签重叠
),secondary_y=True)


fig.update_layout(
    barmode='group',
    template="seaborn",
    title_text=str(df_stock[df_stock['StockCode'] == int(stockcode)]['Name of Securities'].values[0]) + '    ' + stockcode +'.HK',
    xaxis_title="date",
    title_font_color="red",
    yaxis_title=df['Unit'].values[0] +'    '+ df['Currency'].values[0],
    font=dict(size=18),
    uniformtext_minsize=10, # 标签最小字号
    uniformtext_mode='show' # 强制显示所有标签,不自动隐藏
)

内容的提问来源于stack exchange,提问作者Napas Vinitnantharat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:54:10