2012-06-10 16 views
7

Chciałem wydrukować używając imshow w sposób podobny do drugiego przykładu tutaj http://www.scipy.org/Plotting_Tutorial, ale aby ponownie zdefiniować skalę dla osi. Chciałbym też, aby obraz był nieruchomy, podczas gdy ja to robię!Jak zmienić skalę imshow w matplotlib bez rozciągania obrazu?

kod z np

from scipy import * 
from pylab import * 

# Creating the grid of coordinates x,y 
x,y = ogrid[-1.:1.:.01, -1.:1.:.01] 

z = 3*y*(3*x**2-y**2)/4 + .5*cos(6*pi * sqrt(x**2 +y**2) + arctan2(x,y)) 

hold(True) 
# Creating image 
imshow(z, origin='lower', extent=[-1,1,-1,1]) 

xlabel('x') 
ylabel('y') 
title('A spiral !') 

# Adding a line plot slicing the z matrix just for fun. 
plot(x[:], z[50, :]) 

show() 

Jeśli zmodyfikować stopień być szerszy, np

imshow(z, origin='lower', extent=[-4,4,-1,1]) 

obraz wynikowy jest rozciągnięta. Ale wszystko, co chciałem zrobić, to zmienić ticks, aby pokryć się z moimi danymi. Wiem, że mogę użyć pcolor do zachowania danych X i Y, ale ma to inne konsekwencje.

Znalazłem odpowiedź, która pozwala mi ręcznie przerobić wszystkie kleszcze:

How do I convert (or scale) axis values and redefine the tick frequency in matplotlib?

Ale to wydaje się nieco overkill.

Czy istnieje sposób zmiany zakresu wskazanego przez etykiety?

Odpowiedz

11

Znajdziemy argument , który po pewnym czasie wydaje się dawać, co chcemy (kwadratowy obraz spirali, ale ze skalą x od -4 do 4 i y od -1 do 1), gdy jest używany tak:

imshow(z, origin='lower', extent=[-4,4,-1,1], aspect=4) 

ale teraz swoją plot wciąż od -1 do 1, więc trzeba by zmodyfikować, że dobrze ...

plot(x[:]*4, z[50, :]) 

Myślę, że gdy masz kilka elementów, które musiałby zostać zmodyfikowany, używając tylko jednego - zamiast tego zastępowanie kleszczami nie jest przesadą:

xticks(xticks()[0], [str(t*4) for t in xticks()[0]]) 
+0

Aspekt jest dobrym rozwiązaniem dla mojego przypadku użycia, ponieważ nie mam tam działki. Naprawiasz Xticks w bardziej eleganckim rozwiązaniu niż moje. Dziękuję Ci! – ubershmekel

Powiązane problemy