2009-08-28 12 views
13

Jak mogę zmienić pochodzenie wykresu matplotlib na lewy górny róg - w przeciwieństwie do domyślnego dolnego lewego? Używam matplotlib.pylab.plot do tworzenia fabuły (chociaż jeśli jest jeszcze inna procedura drukowania, która jest bardziej elastyczna, proszę dać mi znać).Współrzędne Matplotlib. sys początek do góry po lewej

Poszukuję odpowiednika polecenia matlab: axis ij;

Spędziłem też kilka godzin na surfowaniu po matplotlib i google, ale nie znalazłem odpowiedzi. Niektóre informacje o tym, gdzie mógłbym znaleźć odpowiedź, również byłyby pomocne.

Odpowiedz

8

Aby uzyskać obraz lub wykres konturu, można użyć słowa kluczowego origin = None | 'lower' | 'upper', a dla wykresu liniowego można ustawić wysokość Ylimits na niską.

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

Bezpośrednie ustawienie granic osi za pomocą "ylim ([y1, y2])" lub "osi ([x1, x2, y1, y2])" zadziała. To nie jest całkowicie ogólne, ale jestem pewien, że mogę coś wymyślić, aby było ogólne. Może polecenie setp zasugerowane powyżej. Dzięki za pomoc! – Nate

+0

słowo kluczowe podstęp rozwiązał mój problem. +1 – heltonbiker

12

axis ij po prostu powoduje, że oś Y rośnie w dół zamiast w górę, prawda? Jeśli tak, to matplotlib.axes.invert_yaxis() może być wszystkim, czego potrzebujesz - ale nie mogę tego teraz przetestować.

Jeśli to nie zadziała, znalazłem a mailing post sugerując, że

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

może robić, co chcesz, aby przypominać axis ij.

+0

Nigdy nie mogłem uzyskać invert_yaxis() do pracy. Gdyby tak było, byłoby idealnie. Z tego, co mogłem połączyć, polecenie setp powinno działać, ale "reverse" zwraca iterator. Nie udało mi się jednak uzyskać tego, aby zwrócić sekwencję, choć wciąż jestem w tym stosunkowo nowy. To może być łatwe. – Nate

4

Poniżej jest podstawowym sposobem osiągnięcia tego

ax=pylab.gca() 

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

Najprostszym sposobem jest użycie:

plt.gca().invert_yaxis() 

Origin działa tylko dla imshow.

+0

Udało się to świetnie podczas umieszczania map na zdjęciach satelitarnych za pomocą Cartopa. Zauważ, że przynajmniej w moim przypadku użycia, to musi działać po 'imshow()'. Thanks! – kevinmicke

3

Ten

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

ma przewagę nad tym

plt.gca().invert_yaxis() 

i to, że jeśli jesteś w trybie interaktywnym i wielokrotnie wykreślić tę samą działkę (być może ze zaktualizowanych danych i posiadające przerwania po wykres) oś Y nie będzie odwracać za każdym razem.

Powiązane problemy