为什么 for 循环中定义的子图行为不一致?('numpy.ndarray' 对象没有属性 'plot')



我想在for循环中生成几个子图,但总是得到AttributeError: 'numpy.ndarray' object has no attribute 'plot'

measurements = 9
fig, axs = plt.subplots(3,(measurements+2)//3, sharey=False, gridspec_kw={'wspace': 0.1},figsize =(20, 10))
for i in range(0,measurements):    
try:
axs[0].plot(dfrld_1['RLD date(' + str(i) + ')'], dfrld_1['Depth'],lw=2, color=next(red1))
axs[1].plot(dfrld_2['RLD date(' + str(i) + ')'], dfrld_2['Depth'],lw=2, color=next(red1))
axs[2].plot(dfrld_3['RLD date(' + str(i) + ')'], dfrld_3['Depth'],lw=2, color=next(red1))
axs[3].plot(dfrld_4['RLD date(' + str(i) + ')'], dfrld_4['Depth'],lw=2, color=next(red1))
axs[4].plot(dfrld_5['RLD date(' + str(i) + ')'], dfrld_5['Depth'],lw=2, color=next(red1))
axs[5].plot(dfrld_6['RLD date(' + str(i) + ')'], dfrld_6['Depth'],lw=2, color=next(red1))
axs[6].plot(dfrld_7['RLD date(' + str(i) + ')'], dfrld_7['Depth'],lw=2, color=next(red1))
axs[7].plot(dfrld_8['RLD date(' + str(i) + ')'], dfrld_8['Depth'],lw=2, color=next(red1))
axs[8].plot(dfrld_9['RLD date(' + str(i) + ')'], dfrld_9['Depth'],lw=2, color=next(red1))
except KeyError:
pass
plt.show()

所有数据帧(dfrld_1, dfrld2,...)具有相同的格式。

Depth  RLD date(1)  RLD date(2)  RLD date(3)  RLD date(4)  RLD date(5)  RLD date(6)  RLD date(7)  RLD date(8)  RLD date(9)
0    -10          0.0          0.0     0.135132     0.697177     0.815027     0.571775     0.467736     0.152040     0.168436
1    -20          0.0          0.0     0.059295     0.286268     0.383652     0.218391     0.155417     0.065664     0.057106
2    -40          0.0          0.0     0.000000     0.052796     0.151876     0.297082     0.304435     0.268104     0.247111
3    -60          0.0          0.0     0.000000     0.000000     0.090140     0.145970     0.196542     0.148141     0.145210
4    -80          0.0          0.0     0.000000     0.000000     0.000000     0.000000     0.135144     0.124805     0.114642
我得到的确切错误是:
AttributeError: 'numpy.ndarray' object has no attribute 'plot' 

使用另一个数据帧,看起来相同,只有3个子图,这是没有任何问题的工作。但是在这里我找不到我的错误。

问题是axs是一个numpy数组形状(3,3),而不是(9,1),正如你所期望的,我认为在你的代码。

试题:

measurements = 9
fig, axs = plt.subplots(3,(measurements+2)//3, sharey=False, gridspec_kw={'wspace': 0.1},figsize =(20, 10))
for i in range(0,measurements):    
try:
axs[0][0].plot(dfrld_1['RLD date(' + str(i) + ')'], dfrld_1['Depth'],lw=2, color=next(red1))
axs[0][1].plot(dfrld_2['RLD date(' + str(i) + ')'], dfrld_2['Depth'],lw=2, color=next(red1))
axs[0][2].plot(dfrld_3['RLD date(' + str(i) + ')'], dfrld_3['Depth'],lw=2, color=next(red1))
axs[1][0].plot(dfrld_4['RLD date(' + str(i) + ')'], dfrld_4['Depth'],lw=2, color=next(red1))
axs[1][1].plot(dfrld_5['RLD date(' + str(i) + ')'], dfrld_5['Depth'],lw=2, color=next(red1))
axs[1][2].plot(dfrld_6['RLD date(' + str(i) + ')'], dfrld_6['Depth'],lw=2, color=next(red1))
axs[2][0].plot(dfrld_7['RLD date(' + str(i) + ')'], dfrld_7['Depth'],lw=2, color=next(red1))
axs[2][1].plot(dfrld_8['RLD date(' + str(i) + ')'], dfrld_8['Depth'],lw=2, color=next(red1))
axs[2][2].plot(dfrld_9['RLD date(' + str(i) + ')'], dfrld_9['Depth'],lw=2, color=next(red1))
except KeyError:
pass
plt.show()

根据文档,numpy.ndarray没有plot方法,它是pyplot的一个方法。调用subplots,根据文档,它返回axes.Axes或轴数组。由于可以有两种不同的返回类型,因此应该清楚问题的原因是什么。当你接收到一个数组作为返回值时,你需要处理这种情况。

您可能想要阅读有关绘制数组的源代码,例如:https://www.codegrepper.com/code-examples/python/how+to+plot+numpy+array+in+matplotlib

警告:我没有Python或MatPlotLib方面的经验,我在这个答案中给出的所有信息都是纯理论的,并且基于我在文档中找到的文章,当我搜索概念时,目的是帮助你。

相关内容

  • 没有找到相关文章

最新更新