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

调用add_patch()时出现TypeError: 'int'不可下标访问的问题求助

问题:绘制峰值公差范围矩形时触发TypeError错误

尝试为图表峰值点绘制阴影矩形以展示公差范围,峰值位置已用"x"标记,但运行代码时持续触发错误:TypeError: 'int' object is not subscriptable。已尝试重装库、使用.gca().add_patch()、调整参数格式等方法,均未解决问题。

报错代码片段:

fig, ax = plt.subplots(nrows=4, ncols=1, figsize=(10, 15))

ax[0].plot(plot_data.index, vlwf, color='green', label='VLWf')
ax[0].set_title('Vertical Load Waveform')
ax[0].set_ylabel('N')
ax[0].plot(plot_data.index, iso_max, color='red', label='ISO Max')
ax[0].plot(plot_data.index, iso_min, color='red', label='ISO Min')
ax[0].legend()
ax[0].plot(peak_index, vlwf[peak_index], "x")
ax[0].plot(axoccur_concern, vlwf[axoccur_concern], "o", color='red')
ax_zero = ax[0]
for i in peak_index:
    left, bottom, width, height = (i-30,vlwf[peak_index]-0.05*vlwf[peak_index]-0.05, 60, vlwf[peak_index]+0.05*vlwf[peak_index]-0.05)
    rect = mpatches.Rectangle((left,bottom),width,height, 
                              alpha = 0.1,
                              facecolor = 'red')
    ax_zero.add_patch(rect)
问题原因与修复方案

错误原因

  • 循环内计算矩形参数时,错误使用了vlwf[peak_index]:
    • 若peak_index是单个整数,for i in peak_index会遍历整数的每一位数字,此时i为单个数字,后续vlwf[peak_index]中peak_index是int类型,触发'int' object is not subscriptable错误
    • 即使peak_index是可迭代集合(列表/数组),vlwf[peak_index]返回的是数组,无法直接参与单个矩形的数值计算,逻辑上也不符合“单个峰值周围画矩形”的需求
  • 原代码中height的计算逻辑错误,无法正确表示矩形高度

修复后的代码

将循环内的vlwf[peak_index]全部替换为vlwf[i],同时修正高度计算逻辑,确保peak_index是可迭代集合(如列表、numpy数组):

fig, ax = plt.subplots(nrows=4, ncols=1, figsize=(10, 15))

ax[0].plot(plot_data.index, vlwf, color='green', label='VLWf')
ax[0].set_title('Vertical Load Waveform')
ax[0].set_ylabel('N')
ax[0].plot(plot_data.index, iso_max, color='red', label='ISO Max')
ax[0].plot(plot_data.index, iso_min, color='red', label='ISO Min')
ax[0].legend()
ax[0].plot(peak_index, vlwf[peak_index], "x")
ax[0].plot(axoccur_concern, vlwf[axoccur_concern], "o", color='red')
ax_zero = ax[0]
for i in peak_index:
    # 获取当前峰值的数值
    peak_value = vlwf[i]
    left = i - 30
    bottom = peak_value - 0.05 * peak_value - 0.05
    width = 60
    # 修正高度计算:顶部值减去底部值,确保矩形覆盖公差范围
    height = (peak_value + 0.05 * peak_value) - bottom
    rect = mpatches.Rectangle((left, bottom), width, height, 
                              alpha=0.1,
                              facecolor='red')
    ax_zero.add_patch(rect)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:45:46