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
相关产品推荐
相关产品推荐

