Comment puis-je changer l'échelle de imshow dans matplotlib sans étirement de l'image?

Je voulais de la parcelle à l'aide de imshow, de la même manière pour le deuxième exemple ici http://www.scipy.org/Plotting_Tutorial mais de redéfinir l'échelle pour l'axe. J'aimerais aussi l'image de rester immobile pendant que je fais cela!

Le code de l'exemple:

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

Si je modifie la mesure plus large, par exemple:

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

Alors la résultante de l'image est étirée. Mais tout ce que je voulais faire était de changer les tiques pour coïncider avec mes données. Je sais que je peux utiliser pcolor de conserver les données X et Y, mais qui a d'autres ramifications.

J'ai trouvé cette réponse qui me permet de répéter manuellement toutes les tiques:

Comment puis-je convertir (ou échelle) de l'axe des valeurs et de redéfinir la tique fréquence dans matplotlib?

Mais cela semble un peu exagéré.

Est-il un moyen pour changer seulement la mesure indiqué par les étiquettes?

OriginalL'auteur ubershmekel | 2012-06-10