我想在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方面的经验,我在这个答案中给出的所有信息都是纯理论的,并且基于我在文档中找到的文章,当我搜索概念时,目的是帮助你。