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

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:57:41