Je suis assez nouveau pour Python et je viens d'un point de vue plus Matlab. J'essaie de faire une série de sous-tracés de contourf de 2 x 5 panneaux. Mon approche jusqu'à présent a été de convertir (en un certain degré) mon code Matlab à Python et tracer mes sous-tracés dans une boucle. La partie relavente du code ressemble à ceci:
fig=plt.figure(figsize=(15, 6),facecolor='w', edgecolor='k')
for i in range(10):
#this part is just arranging the data for contourf
ind2 = py.find(zz==i+1)
sfr_mass_mat = np.reshape(sfr_mass[ind2],(pixmax_x,pixmax_y))
sfr_mass_sub = sfr_mass[ind2]
zi = griddata(massloclist, sfrloclist, sfr_mass_sub,xi,yi,interp='nn')
temp = 250+i # this is to index the position of the subplot
ax=plt.subplot(temp)
ax.contourf(xi,yi,zi,5,cmap=plt.cm.Oranges)
plt.subplots_adjust(hspace = .5,wspace=.001)
#just annotating where each contour plot is being placed
ax.set_title(str(temp))
En tant que débutant sur ce forum, je ne semble pas être autorisé à joindre l'image résultante. Cependant, selon mon indexation dans le code comme "temp", la disposition résultante des panneaux 2 x 5 est:
251 - 252 - 253 - 254 - 255
256 - 257 - 258 - 259 - 250
Cependant, ce que je veux c'est
250 - 251 - 252 - 253 - 254
255 - 256 - 257 - 258 - 259
Autrement dit, le premier panneau (250) apparaît dans la dernière position où je pense que 259 devrait être. Et 251 semble être l'endroit où je veux placer 250. Ils semblent tous être dans le bon ordre, juste décalés d'un cercle.
Je sais que ce sera quelque chose de très stupide, mais apprécie toute aide que vous pouvez apporter.
Merci d'avance.
En utilisant votre code avec des données aléatoires, cela fonctionnerait:
fig, axs = plt.subplots(2,5, figsize=(15, 6), facecolor='w', edgecolor='k')
fig.subplots_adjust(hspace = .5, wspace=.001)
axs = axs.ravel()
for i in range(10):
axs[i].contourf(np.random.Rand(10,10),5,cmap=plt.cm.Oranges)
axs[i].set_title(str(250+i))
La disposition est bien sûr un peu désordonnée, mais c'est à cause de vos paramètres actuels (figsize, wspace, etc.).
Le problème est l'indexation que subplot
utilise. Les sous-parcelles sont comptées en commençant par 1! Votre code doit donc être lu
fig=plt.figure(figsize=(15, 6),facecolor='w', edgecolor='k')
for i in range(10):
#this part is just arranging the data for contourf
ind2 = py.find(zz==i+1)
sfr_mass_mat = np.reshape(sfr_mass[ind2],(pixmax_x,pixmax_y))
sfr_mass_sub = sfr_mass[ind2]
zi = griddata(massloclist, sfrloclist, sfr_mass_sub,xi,yi,interp='nn')
temp = 251+i # this is to index the position of the subplot
ax=plt.subplot(temp)
ax.contourf(xi,yi,zi,5,cmap=plt.cm.Oranges)
plt.subplots_adjust(hspace = .5,wspace=.001)
#just annotating where each contour plot is being placed
ax.set_title(str(temp))
Notez le changement dans la ligne où vous calculez temp
Fondamentalement, la même solution que celle fournie par Rutger Kassies , mais en utilisant une syntaxe plus Pythonic:
fig, axs = plt.subplots(2,5, figsize=(15, 6), facecolor='w', edgecolor='k')
fig.subplots_adjust(hspace = .5, wspace=.001)
data = np.arange(250, 260)
for ax, d in Zip(axs.ravel(), data):
ax.contourf(np.random.Rand(10,10), 5, cmap=plt.cm.Oranges)
ax.set_title(str(d))