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

Plotly堆叠条形图y轴百分比刻度避免乘以100的配置问题

解决Plotly Go堆叠条形图y轴百分比刻度显示异常的问题

问题原因

当设置barnorm='percent'时,Plotly已经将每组堆叠条形的y轴数值计算为0-100的百分比值(总和为100),但d3的%/p格式化规则默认会将数值再乘以100后添加百分号,导致100被错误显示为10000%。

解决方案1:手动指定刻度(推荐)

直接通过tickvals定义刻度数值,ticktext定义显示的文本,绕过d3的自动转换逻辑:

animals=['giraffes', 'orangutans', 'monkeys']

fig = go.Figure(data=[
    go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
    go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])

fig.update_layout(
        barmode='stack',
        barnorm='percent',
        font_family="Roboto",
        font_size=15,
        yaxis=dict(
            tickvals=[0, 25, 50, 75, 100],
            ticktext=['0%', '25%', '50%', '75%', '100%']
        ),
        showlegend=True
    )

fig.show()

解决方案2:手动计算百分比数值

放弃使用barnorm='percent',自行将原始y值转换为0-1的小数,再用tickformat='.0%'自动生成正确刻度:

animals=['giraffes', 'orangutans', 'monkeys']
sf_y = [20, 14, 23]
la_y = [12, 18, 29]

# 计算每组的百分比(转换为0-1的小数)
sf_percent = [y / (sf + la) for y, sf, la in zip(sf_y, sf_y, la_y)]
la_percent = [y / (sf + la) for y, sf, la in zip(la_y, sf_y, la_y)]

fig = go.Figure(data=[
    go.Bar(name='SF Zoo', x=animals, y=sf_percent),
    go.Bar(name='LA Zoo', x=animals, y=la_percent)
])

fig.update_layout(
        barmode='stack',
        font_family="Roboto",
        font_size=15,
        yaxis=dict(tickformat='.0%'),
        showlegend=True
    )

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:05:22