2012-06-10 29 views
7

Tôi muốn vẽ bằng cách sử dụng imshow theo cách tương tự như ví dụ thứ hai ở đây http://www.scipy.org/Plotting_Tutorial nhưng để xác định lại tỷ lệ cho trục. Tôi cũng muốn hình ảnh vẫn ở lại trong khi tôi làm điều này!Làm cách nào để thay đổi tỷ lệ imshow trong matplotlib mà không kéo giãn hình ảnh?

Mã từ ví dụ:

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

Nếu tôi thay đổi mức độ rộng hơn, ví dụ:

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

Sau đó thì ảnh thu được kéo dài. Nhưng tất cả những gì tôi muốn làm là thay đổi các dấu tích trùng với dữ liệu của tôi. Tôi biết tôi có thể sử dụng pcolor để bảo tồn dữ liệu X và Y, mặc dù có các nhánh khác cho nó.

Tôi tìm thấy câu trả lời này cho phép tôi tự làm lại tất cả các bọ ve:

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

Nhưng điều đó có vẻ hơi quá đáng chút.

Có cách nào để chỉ thay đổi phạm vi được hiển thị bởi các nhãn không?

Trả lời

11

A help(imshow) sẽ tìm đối số aspect, sau một chút thử nghiệm dường như cung cấp những gì bạn muốn (hình vuông của hình xoắn ốc nhưng với thang đo x từ -4 đến 4 và y từ -1 đến 1) khi được sử dụng như thế này:

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

Nhưng bây giờ plot của bạn vẫn là từ -1 đến 1, vì vậy bạn sẽ phải sửa đổi mà cũng ...

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

tôi nghĩ rằng khi bạn có một vài yếu tố mà sẽ phải được sửa đổi, chỉ cần sử dụng một thay vì gắn nhãn không phải là quá mức cần thiết:

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

Aspect là giải pháp tốt cho trường hợp sử dụng của tôi vì tôi không có cốt truyện ở đó. Và bạn sửa xticks trong một giải pháp thanh lịch hơn tôi. Cảm ơn bạn! – ubershmekel

Các vấn đề liên quan