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

如何解决matplotlib中‘Axes’ object is not subscriptable报错?

报错原因分析
  • 核心问题在于plt.subplots()的返回值结构:当子图的行数或列数为1时,它不会返回二维数组,而是返回一维数组(若其中一个维度是1)。你这里n_cols=1,所以axes是长度为2的一维数组,每个元素是单个Axes对象。此时执行axes[row_num][col_num],相当于先取到Axes对象,再对它用下标访问,自然会抛出"Axes' object is not subscriptable"错误。
  • 另外代码还有个语法小问题:f'Plot {row_num+1}),{col_num+1})'里多了两个多余的右括号,会导致字符串格式化失败,需要同步修正。
解决方法

推荐两种方案,按需选择:

方案1:强制返回二维数组(通用型)

调用subplots时添加squeeze=False参数,这样无论行列数是否为1,都会返回二维数组,原循环代码无需修改:

import matplotlib.pyplot as plt 
import numpy as np
n_rows = 2
n_cols = 1 
# 添加squeeze=False参数,强制返回二维数组
fig,axes = plt.subplots(n_rows,n_cols, squeeze=False)
for row_num in range(n_rows):
    for col_num in range(n_cols):
        ax= axes[row_num][col_num]
        ax.plot(np.random.rand(20))
        # 修正f-string的括号错误
        ax.set_title(f'Plot ({row_num+1}, {col_num+1})')
fig.suptitle('Main title')
fig.tight_layout()
plt.show()

方案2:适配一维数组结构(针对性)

如果不想修改subplots的参数,可以直接调整索引方式,因为n_cols=1,axes是一维数组,不需要列维度的索引:

import matplotlib.pyplot as plt 
import numpy as np
n_rows = 2
n_cols = 1 
fig,axes = plt.subplots(n_rows,n_cols)
for row_num in range(n_rows):
    # 直接取一维数组的元素
    ax= axes[row_num]
    ax.plot(np.random.rand(20))
    ax.set_title(f'Plot ({row_num+1}, 1)')
fig.suptitle('Main title')
fig.tight_layout()
plt.show()
是否由Python版本导致?

这个错误和Python版本无关,是matplotlib库中subplots函数的设计行为——它会自动挤压(squeeze)长度为1的维度,减少数组的维度层级。这个行为在各个Python版本对应的matplotlib稳定版中都是一致的,和Python版本没有关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:17:39