如何解决Matplotlib绘制时间序列垂直线的数组索引越界问题?
解决时间序列图垂直线绘制的索引越界问题
问题根源是on_ofProc[j]的元素数量不稳定,当该数组长度小于2时,直接访问on_ofProc[j][1][0]会触发IndexError。以下是两种可行的修复方案:
方案1:前置长度判断(推荐)
在绘制第二条红色垂直线前,先检查on_ofProc[j]的长度是否满足要求,避免访问不存在的索引:
for j in range(len(x)): plt.figure(figsize=(18,7)) ax = plt.subplot(211) plt.plot(tracesProc[j], 'k') ymin, ymax = ax.get_ylim() if on_ofProc[j] != []: plt.vlines(on_ofProc[j][0][0], ymin, ymax, color='r', linewidth=2) # 仅当数组长度≥2时,才绘制第二条垂直线 if len(on_ofProc[j]) >= 2: plt.vlines(on_ofProc[j][1][0], ymin, ymax, color='r', linewidth=3) if on_ofNonP[j] != []: plt.vlines(on_ofNonP[j][0][0], ymin, ymax, color='m', linewidth=2)
这种方式逻辑清晰,执行效率高,是最直接的解决方案。
方案2:异常捕获处理
如果无法提前判断数组长度,也可以用try-except捕获索引越界异常,跳过错误执行:
for j in range(len(x)): plt.figure(figsize=(18,7)) ax = plt.subplot(211) plt.plot(tracesProc[j], 'k') ymin, ymax = ax.get_ylim() if on_ofProc[j] != []: plt.vlines(on_ofProc[j][0][0], ymin, ymax, color='r', linewidth=2) # 捕获索引越界异常,跳过错误操作 try: plt.vlines(on_ofProc[j][1][0], ymin, ymax, color='r', linewidth=3) except IndexError: pass if on_ofNonP[j] != []: plt.vlines(on_ofNonP[j][0][0], ymin, ymax, color='m', linewidth=2)
这种方式适合数组结构复杂、难以预判长度的场景,但异常处理的执行开销略高于前置判断。
内容的提问来源于stack exchange,提问作者Pahan
相关产品推荐
相关产品推荐

