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

Matplotlib绘制子图箱线图触发IndexError:数组维度索引错误

问题原因及解决方法

核心错误点

  • 子图索引误用:plt.subplots(1, 2)创建的是1行2列的子图布局,返回的axs是一维数组,你用axs[0, 0]和axs[0, 1]这种二维索引方式,必然触发维度不匹配的报错。
  • 箱线图绘制方式错误:子图模式下,应该调用子图对象的boxplot()方法,而非全局的plt.boxplot(),否则会打乱子图布局。
  • 未定义变量问题:代码中array2 = np.zeros((len(repeats), len(correl)))里的correl未定义,推测是笔误,应该替换为cols。

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt

cols = [0, 1, 2, 3, 4]
repeats = np.linspace(0, 49, 50)

# 修正未定义变量问题,统一用cols
array1 = np.zeros((len(repeats), len(cols)))
array2 = np.zeros((len(repeats), len(cols)))

# 模拟数据填充(实际使用时替换为你的数据生成逻辑)
for i in range(len(cols)):
    for j in range(len(repeats)):
        array1[j, i] = np.random.normal(loc=i*2, scale=1)
        array2[j, i] = np.random.normal(loc=i*2 + 1, scale=1.2)

# 创建1行2列的子图
fig3, axs = plt.subplots(1, 2, figsize=(12, 6))

# 在第一个子图绘制array1的箱线图
axs[0].boxplot(array1, labels=cols)
axs[0].set_title('数组1的箱线图')
axs[0].set_xlabel('列索引')
axs[0].set_ylabel('数值')

# 在第二个子图绘制array2的箱线图
axs[1].boxplot(array2, labels=cols)
axs[1].set_title('数组2的箱线图')
axs[1].set_xlabel('列索引')
axs[1].set_ylabel('数值')

plt.tight_layout()  # 自动调整子图间距,避免标签重叠
plt.show()

关键说明

  • 当plt.subplots()的行/列数为1时,返回的axs是一维数组,直接用axs[0]、axs[1]索引即可;只有多行多列布局(比如2×2),才需要用axs[row_idx, col_idx]的二维索引。
  • Matplotlib的boxplot()默认会把二维数组的每一列作为一个数据集绘制箱体,正好符合你“每列对应一个箱体”的需求,无需额外转置数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:12:14