2009-08-28 6 views
13

Comment puis-je retourner l'origine d'un tracé matplotlib dans le coin supérieur gauche, par opposition à l'origine par défaut en bas à gauche? J'utilise matplotlib.pylab.plot pour produire l'intrigue (mais s'il y a une autre routine de traçage qui est plus flexible, s'il vous plaît faites le moi savoir).Matplotlib coord. Origine sys en haut à gauche

Je cherche l'équivalent de la commande matlab: axis ij;

De plus, j'ai passé quelques heures à surfer sur l'aide de matplotlib et google mais je n'ai pas trouvé de réponse. Quelques informations sur où j'aurais pu chercher la réponse seraient utiles aussi.

Répondre

8

Pour un tracé d'image ou de contour, vous pouvez utiliser le mot-clé origin = None | 'lower' | 'upper' et pour un tracé de ligne, vous pouvez définir les limites y à un niveau haut.

from pylab import * 
A = arange(25)/25. 
A = A.reshape((5,5)) 

figure() 
imshow(A, interpolation='nearest', origin='lower') 

figure() 
imshow(A, interpolation='nearest') 

d = arange(5) 
figure() 
plot(d) 
ylim(5, 0) 

show() 
+1

La définition directe des limites d'axe avec "ylim ([y1, y2])" ou "axis ([x1, x2, y1, y2])" travaillera. Ce n'est pas complètement générique, mais je suis sûr que je peux comprendre quelque chose pour le rendre générique. Peut-être que la commande setp suggérée ci-dessus. Merci pour votre aide! – Nate

+0

astuce de mot clé résolu mon problème. +1 – heltonbiker

12

axis ij fait juste l'axe des y augmenter vers le bas au lieu de vers le haut, non? Si oui, alors matplotlib.axes.invert_yaxis() pourrait être tout ce dont vous avez besoin - mais je ne peux pas le tester maintenant.

Si cela ne fonctionne pas, je trouve a mailing post ce qui suggère que

setp(gca(), 'ylim', reversed(getp(gca(), 'ylim'))) 

peut faire ce que vous voulez ressembler à axis ij.

+0

Je n'ai jamais pu invert_yaxis() pour fonctionner. Si c'était le cas, ce serait idéal. De ce que je pourrais rassembler, la commande setp devrait fonctionner, mais "reverse" renvoie un itérateur. Je ne pouvais pas l'obtenir pour retourner une séquence à la place, bien que je sois relativement nouveau à ce sujet. Donc, ça peut être facile. – Nate

4

Ce qui suit est un moyen de base pour atteindre cet

ax=pylab.gca() 

ax.set_ylim(ax.get_ylim()[::-1]) 
10

La façon la plus simple est d'utiliser:

plt.gca().invert_yaxis() 

Origin ne fonctionne que pour imshow.

+0

Cela a bien fonctionné lors de la mise en place de cartes sur l'imagerie satellite avec Cartopy. Notez que, au moins dans mon cas d'utilisation, cela doit fonctionner après le 'imshow()'. Merci! – kevinmicke

3

Ce

plt.ylim(max(plt.ylim()), min(plt.ylim())) 

a un avantage sur ce

plt.gca().invert_yaxis() 

et est que si vous êtes en mode interactif et vous tracer plusieurs fois sur la même parcelle (peut-être avec des données mises à jour et ayant un point d'arrêt après l'intrigue) l'axe y ne va pas continuer à inverser à chaque fois.