Python绘制矩阵时遇IndexError索引越界问题求助
解决IndexError: index 9 is out of bounds的问题
这个错误的核心很清晰:你尝试访问索引9,但你的data数组在第一个维度上只有9个元素——数组索引是从0开始的,所以合法索引范围是0到8,索引9自然就越界了。下面是一步步排查和解决的方法:
1. 定位问题根源
错误出在plt.plot(data[Pdict[name]], label=name)这一行,说明Pdict[name]返回的值是9,而这个值超出了data的索引范围。你可以先在循环里加一行调试代码,看看具体哪个玩家的索引出了问题:
def myplot(data, playerlist = Players): print(f"Data的第一维度长度: {data.shape[0]}") # 打印data的第一维度大小 for name in playerlist: idx = Pdict[name] print(f"玩家{name}对应的索引是: {idx}") # 输出每个玩家的索引 plt.plot(data[idx], label=name) # 其余代码不变
运行后你就能看到哪个玩家的索引是9,这就是问题所在。
2. 修正错误索引
找到那个索引为9的玩家后,去检查Pdict字典的定义,把对应的索引改成0到8之间的有效值。比如如果是字典里的笔误,把8写成了9,修正即可。
3. 修复潜在的刻度不匹配问题
虽然这不是当前报错的原因,但你的plt.xticks(list(range(0,10)), Seasons, rotation='vertical')里用了range(0,10)(10个刻度),如果Seasons的长度是9(和data的维度一致),这里会导致刻度和数据不匹配。建议改成动态匹配的写法:
plt.xticks(list(range(len(Seasons))), Seasons, rotation='vertical')
这样不管Seasons有多少个元素,刻度数量都会自动匹配。
优化后的示例代码
import matplotlib.pyplot as plt def myplot(data, playerlist = Players): # 先确认data的维度信息 print(f"Data形状: {data.shape}") for name in playerlist: idx = Pdict[name] # 提前检查索引是否合法,避免报错 if idx < 0 or idx >= data.shape[0]: print(f"警告:玩家{name}的索引{idx}超出范围,跳过该玩家") continue plt.plot(data[idx], label=name) plt.legend(loc='upper left', bbox_to_anchor=(1,1)) plt.xticks(list(range(len(Seasons))), Seasons, rotation='vertical') plt.show()
内容的提问来源于stack exchange,提问作者shivani
相关产品推荐
相关产品推荐

