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

Python使用subplot绘制多幅饼图报错AttributeError如何解决?

报错原因说明

你遇到的'numpy.ndarray' object has no attribute 'pie'报错,是因为调用plt.subplots(3,2)生成的子图对象是一个shape为(3,2)的二维numpy数组,存储了所有子图的Axes实例,不能直接对整个数组调用pie()方法,需要先索引到单个子图的Axes对象再执行绘制操作。
注意Python2.7兼容的matplotlib最高版本为2.2.x,若运行代码出现版本相关报错可先确认matplotlib版本符合要求

3行2列饼图排布实现代码
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

# 替换为你自己的6组饼图数据
pie_datasets = [
    [35, 25, 40],
    [15, 55, 30],
    [20, 30, 50],
    [45, 25, 30],
    [10, 60, 30],
    [30, 35, 35]
]
# 饼图公共配置,可根据需求修改
pie_labels = ['分类1', '分类2', '分类3']
pie_autopct = '%1.1f%%'

# 创建画布与3行2列子图
fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(9, 12))
# 将二维子图数组展平为一维,方便批量遍历
axes = axes.flatten()

# 循环遍历绘制所有饼图
for idx in range(len(pie_datasets)):
    axes[idx].pie(pie_datasets[idx], labels=pie_labels, autopct=pie_autopct)
    axes[idx].set_title('第{}组数据分布'.format(idx + 1))

# 自动调整子图间距避免内容重叠
plt.tight_layout()
plt.show()
代码简化建议
  • 将所有饼图的数据源统一存入列表批量遍历,避免重复编写6次独立的饼图绘制逻辑
  • 调用flatten()方法将二维子图数组转为一维,省略嵌套循环定位子图的步骤
  • 饼图的公共参数(标签、百分比格式、颜色等)统一提取为变量,无需每次调用pie()时重复传参
  • 后续需要调整所有饼图的样式时,直接在循环内修改一次即可,不用逐个子图调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:42:02