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

如何覆盖Matplotlib饼图自动百分比计算,强制显示指定数值(允许总和不为100%)

Matplotlib饼图强制显示自定义百分比的解决方法

偏差原因

Matplotlib的autopct参数默认会将所有输入的values值求和后归一化为100%,再计算每个扇区的占比。你第二组数据的总和为0.027+0.09+0.35+0.534=1.001,0.534占总和的比例约为53.35%,四舍五入后就显示为和你预期不符的53.3%。

解决方法

推荐使用手动修改文本标签的方案,完全跳过自动计算逻辑,支持任意自定义百分比显示,不受总和限制:

import matplotlib.pyplot as plt

colorPalette=["#61412B","#DCC57D","#D57838","#FFCE33"]

fig, (ax1,ax2)=plt.subplots(1,2,figsize=(10,10))
labels=["Small","Mid","Large"]
values=[.258,.284,.458]
ax1.pie(values,labels=labels,explode=[0.01,0.01,0.01],colors=colorPalette,autopct='%1.1f%%')

labels=["Market Peg","Primary Peg (Passive)","Limit","MidPoint Peg"]
values=[.027,.09,.35,.534]
# 接收饼图返回的百分比文本对象列表
wedges, label_texts, pct_texts = ax2.pie(values,labels=labels,explode=[0.01,0.01,0.01,0.01],colors=colorPalette,autopct='%1.1f%%')
# 逐个替换为原始数值计算的百分比
for pct_text, val in zip(pct_texts, values):
    pct_text.set_text(f"{val*100:.1f}%")

plt.show()

运行后第二张饼图的最后一个扇区就会按照预期显示53.4%,你也可以根据需求修改set_text的内容,完全不受百分比总和是否为100%的限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:09