Le code ci-dessous produit des espaces entre les sous-graphiques. Comment supprimer les espaces entre les sous-graphiques et créer une grille serrée de l'image?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
python
matplotlib
user3006135
la source
la source
None
ne fait pas ce que vous pensez, cela signifie «utiliser la valeur par défaut».plt.subplots_adjust(wspace=0, hspace=0)
résoudrait votre problème, sans le fait que vous utilisez l''equal'
aspect. Voir ma réponse pour plus de détails.Réponses:
Vous pouvez utiliser gridspec pour contrôler l'espacement entre les axes. Il y a plus d' informations ici.
la source
GridSpec
, si vous prenez la figurine à la création, vous pouvez également définir les distances avec:fig.subplots_adjust(hspace=, wspace=)
for
boucle?subplots
. Cette réponse fait le travail sans sacrifiersubplots
.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:
Le résultat est le suivant:
Cependant, avec
aspect='equal'
, comme dans le code suivant: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:
Voici le résultat:
la source
plt.subplots_adjust(wspace=0, hspace=0)
Sans recourir entièrement à gridspec , les éléments suivants peuvent également être utilisés pour supprimer les espaces en définissant wspace et hspace sur zéro:
Résultant en:
la source
Avez-vous essayé
plt.tight_layout()
?avec
plt.tight_layout()
sans elle:Ou: quelque chose comme ça (utiliser
add_axes
)Si vous n'avez pas besoin de partager des axes, alors simplement
axLS=map(fig.add_axes, rectLS)
la source
Avec les versions récentes de matplotlib, vous voudrez peut-être essayer la mise en page contrainte . Cela ne fonctionne pas avec
plt.subplot()
cependant, vous devez donc utiliser à laplt.subplots()
place:la source