2012-06-10 2 views
7

여기의 두 번째 예제와 비슷한 방식으로 imshow를 사용하여 플롯하려하지만 축의 스케일을 다시 정의하고 싶습니다. 내가하는 동안 이미지가 여전히 남아 있기를 바랍니다. 예에서이미지를 늘리지 않고 matplotlib에서 imshow의 배율을 변경하려면 어떻게해야합니까?

코드 :

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() 

I가 넓게 범위를 수정하는 경우

예 :

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

이어서 결과적인 이미지가 연신된다. 하지만 내가 원하는 것은 내 데이터와 일치하도록 틱을 변경하는 것이 었습니다. X와 Y 데이터를 보존하기 위해 pcolor를 사용할 수 있다는 것을 알고 있습니다.하지만 다른 결과가 있습니다.

나는 내가 수동으로 모든 틱을 다시 할 수 있습니다이 답변 발견

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

을하지만 조금 잔인한 것 같다.

레이블에 표시된 범위 만 변경하는 방법이 있습니까?

답변

11

help(imshow)는 실험의 비트가 사용되는 때 (나선형의 만 -4 4와 y -1에서 1까지의 X 스케일 정사각형 이미지)를 원하는 줄 것으로 보인다 후 aspect 인수를 찾을 수 같은 :

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

그러나 당신은뿐만 아니라 것을 수정해야 할 것입니다, 그래서 지금 plot는 -1에서 1로 여전히 ...

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

을 난 당신이 몇 가지 요소가있을 때 생각 하나만 사용하여 수정해야합니다. 대신 라인 틱 레이블링 재발행은 과도하지 않습니다.

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

나는 플롯이 없으므로 aspect를 사용하는 것이 좋습니다. 그리고 당신은 xticks를 제보다 더 우아한 해결책으로 수정했습니다. 고맙습니다! – ubershmekel

관련 문제