Le problème est l'utilisation de aspect='equal'
, qui empêche les sous-graphiques de s'étirer à un rapport hauteur / largeur arbitraire et de remplir tout l'espace vide.
Normalement, cela fonctionnerait:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
plt.subplots_adjust(wspace=0, hspace=0)
Le résultat est le suivant:
Cependant, avec aspect='equal'
, comme dans le code suivant:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
plt.subplots_adjust(wspace=0, hspace=0)
Voici ce que nous obtenons:
La différence dans ce deuxième cas est que vous avez forcé les axes x et y à avoir le même nombre d'unités / pixel. Étant donné que les axes vont de 0 à 1 par défaut (c'est-à-dire avant de tracer quoi que ce soit), l'utilisation aspect='equal'
force chaque axe à être un carré. Puisque la figure n'est pas un carré, pyplot ajoute un espacement supplémentaire entre les axes horizontalement.
Pour contourner ce problème, vous pouvez définir votre silhouette pour qu'elle ait le bon rapport hauteur / largeur. Nous allons utiliser ici l'interface pyplot orientée objet, que je considère comme supérieure en général:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio
ax = [fig.add_subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
fig.subplots_adjust(wspace=0, hspace=0)
Voici le résultat:
None
ne fait pas ce que vous pensez, cela signifie «utiliser la valeur par défaut».