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

Matplotlib多子图饼图最后一个子图标题被主图覆盖问题咨询

问题产生原因
  • Matplotlib的全局plt系列接口在多子图场景下,默认作用于最后处于激活状态的子图:
    遍历完所有子图后,最后一个子图处于激活状态,你后续调用的plt.title("Temp")本意是设置主图标题,实际直接覆盖了最后一个子图的自定义标题;同时plt.axis('equal')也仅作用在最后一个子图上,导致其格式异常。
  • 此外你的代码还有三处语法问题会导致运行报错:缺少numpy包导入、always_passing_list_tt变量未定义、always_failing_list_tt被重复赋值覆盖。
修复方案
  1. 主图标题改用画布对象的suptitle()方法设置,避免作用到子图上
  2. 删掉全局的plt.axis('equal'),改为在每个子图绘制饼图时单独设置等比例轴(也可以直接省略,pie()方法默认会保持子图等比例)
  3. 补全缺失的变量定义和包导入,删除重复赋值语句
修正后完整代码
import numpy as np
import matplotlib.pyplot as plt

# 补全/修正变量定义
keep_list_tt = [6.012, 2.734, 2.76, 4.585, 4.19]
eppm_plot    = [0, 771, 830, 919, 1097]
all_test_tt = [31.344, 31.344, 31.344, 31.344, 31.344]
always_failing_list_tt = [0.112, 0.112, 0.112, 0.112, 0.112]
# 这里给always_passing_list_tt补了示例值,你可以替换成自己的真实数据
always_passing_list_tt = [2,2,2,2,2]

fig, axs = plt.subplots(1,len(keep_list_tt), figsize=(30,8))
labels = ["always_failing_list_tt", "always_passing_list_tt", "keep_list_tt","remove_list_tt"]
explode = (0.2, 0,0.1,0.1)

for i in range(len(keep_list_tt)):
    eppm_pie_plot = [
        always_failing_list_tt[i],
        always_passing_list_tt[i],
        keep_list_tt[i],
        round(np.subtract(all_test_tt[i],np.add(keep_list_tt[i],np.add(always_failing_list_tt[i],always_passing_list_tt[i]))),3)
    ] 
    pie = axs[i].pie(eppm_pie_plot, explode=explode,autopct="")
    axs[i].set_title("EPPM is - {}".format(eppm_plot[i]))
    # 每个子图单独设置等比例轴
    axs[i].axis('equal')
    for j, a in enumerate(pie[2]):
        a.set_text("{}".format(eppm_pie_plot[j]))
    
plt.legend(labels,bbox_to_anchor=(1.1,0.5) )
# 用fig.suptitle设置主图标题
fig.suptitle("Temp", y=1.02)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:18:03