调用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
相关产品推荐
相关产品推荐

