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

Jupyter中如何通过for循环正确绘制并显示多个饼图?

问题原因

原代码每次循环调用plt.pie()时,都会在matplotlib默认生成的同一个画布轴对象上覆盖绘制,Jupyter默认只会在单元格执行完成后渲染最终状态的画布,前两次的绘制内容会被后续操作覆盖,因此最终只能看到最后一张饼图。

水平排列多饼图实现方法

要实现三个饼图水平并排展示,最直接的方式是提前通过plt.subplots()创建1行3列的子图布局,循环时将每个饼图绘制到对应的子轴上即可,可直接运行的代码如下:

import matplotlib.pyplot as plt

# 创建1行3列的水平排布画布,设置合适尺寸避免内容挤压
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 4))
labels = ['part_1', 'part_2', 'part_3']
pie_portions = [5, 6, 7]

for idx, ax in enumerate(axes):
    ax.pie(pie_portions, labels=labels, autopct='%1.1f%%')
    ax.set_title(f'figure_no : {idx+1}')

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()
其他排布需求参考
  • 若需要垂直排列子图:将plt.subplots()参数修改为nrows=3, ncols=1,同时调整画布尺寸为figsize=(4, 12)即可。
  • 若需要逐张垂直输出独立饼图(不做并排):在原循环每次绘图结束后增加plt.show(),强制Jupyter立即渲染当前画布即可,代码示例:
import matplotlib.pyplot as plt
for i in range(3):
    labels = ['part_1','part_2','part_3']
    pie_portions = [5,6,7]
    plt.pie(pie_portions,labels=labels,autopct = '%1.1f%%')
    plt.title(f'figure_no : {i+1}')
    plt.show()

注意:这种逐张show()的方式无法实现水平并排效果,仅适合独立图表逐行输出的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:18:28