Issue
I want to generate several subplots within a for loop, but always get the 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()
All dataframes (dfrld_1, dfrld2,...)
have the same format.
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
The exact error I get is:
AttributeError: 'numpy.ndarray' object has no attribute 'plot'
With anoather dataframe, which look the same and only 3 subplots this is working without any problems. But here I cannot find my mistake.
Solution
The problem is that axs
is a numpy array with shape (3,3) and not (9, 1) as you expect I think in your code.
Try:
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()
Answered By - Florian Gacon
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.