如何覆盖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
相关产品推荐
相关产品推荐

