J'essaie de faire un tracé carré (en utilisant imshow), c'est-à-dire un rapport hauteur / largeur de 1: 1, mais je ne peux pas. Aucun de ces travaux:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
Il semble que les appels soient simplement ignorés (un problème que je semble souvent avoir avec matplotlib).
python
matplotlib
jtlz2
la source
la source
ax.axis('equal')
, par hasard? Comme tout le monde l'a dit, ce que vous avez fait devrait fonctionner, maisax.axis
pourrait être un autre moyen d'essayer une solution de contournement.Réponses:
Troisième fois le charme. Je suppose que c'est un bogue et la réponse de Zhenya suggère qu'il est corrigé dans la dernière version. J'ai la version 0.99.1.1 et j'ai créé la solution suivante:
C'est 'force.png':
Voici mes tentatives infructueuses, mais j'espère informatives.
Deuxième réponse:
Ma «réponse originale» ci-dessous est exagérée, car elle fait quelque chose de similaire à
axes.set_aspect()
. Je pense que vous voulez utiliseraxes.set_aspect('auto')
. Je ne comprends pas pourquoi c'est le cas, mais cela produit un tracé d'image carrée pour moi, par exemple ce script:Produit un tracé d'image avec un rapport hauteur / largeur 'égal': et un avec un rapport hauteur / largeur 'auto':
Le code fourni ci-dessous dans la «réponse originale» fournit un point de départ pour un rapport hauteur / largeur explicitement contrôlé, mais il semble être ignoré une fois qu'un imshow est appelé.
Réponse originale:
Voici un exemple de routine qui ajustera les paramètres du sous-tracé afin que vous obteniez le rapport hauteur / largeur souhaité:
Cela produit un chiffre comme celui-ci:
Je peux imaginer que si vous avez plusieurs sous-graphiques dans la figure, vous voudriez inclure le nombre de sous-graphiques y et x en tant que paramètres de mot-clé (par défaut à 1 chacun) à la routine fournie. Ensuite, en utilisant ces nombres et les mots
hspace
-wspace
clés et , vous pouvez faire en sorte que tous les sous-graphiques aient le bon rapport hauteur / largeur.la source
get_images
y a une liste vide (comme cela se passerait avecax.plot([0,1],[0,2])
, vous pouvez utiliserget_xlim
etget_ylim
Quelle est la
matplotlib
version que vous utilisez? J'ai récemment dû passer à1.1.0
, et avec cela, celaadd_subplot(111,aspect='equal')
fonctionne pour moi.la source
matplotlib
version2.0.2
.jupyter notebook
version5.0.0
. Merci.Après de nombreuses années de succès avec les réponses ci-dessus, j'ai trouvé que cela ne fonctionnait plus - mais j'ai trouvé une solution de travail pour les sous-parcelles à
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
Avec tout le crédit bien sûr à l'auteur ci-dessus (qui peut peut-être plutôt poster ici), les lignes pertinentes sont:
Le lien a également une explication claire des différents systèmes de coordonnées utilisés par matplotlib.
Merci pour toutes les bonnes réponses reçues - en particulier @ Yann's qui restera le gagnant.
la source
vous devriez essayer avec figaspect. Ça marche pour moi. À partir de la documentation:
Edit: Je ne suis pas sûr de ce que vous recherchez. Le code ci-dessus modifie le canevas (la taille du tracé). Si vous souhaitez modifier la taille de la fenêtre matplotlib, de la figure, utilisez:
cela produit une fenêtre de 5x1 (lxh).
la source
Cette réponse est basée sur la réponse de Yann. Il définira le rapport hauteur / largeur pour les graphiques linéaires ou log-log. J'ai utilisé des informations supplémentaires de https://stackoverflow.com/a/16290035/2966723 pour tester si les axes sont à l'échelle logarithmique.
De toute évidence, vous pouvez utiliser n'importe quelle version de
log
votre choix, que j'ai utiliséescipy
, maisnumpy
oumath
devrait être bien.la source