Python: 2D carte de la couleur avec imshow
Je suis en train d'essayer de représenter une fonction de deux variables sur un graphique à deux dimensions à l'aide de la couleur.
Je suis tombé sur cet exemple ici:
from numpy import exp,arange
from pylab import meshgrid,cm,imshow,contour,clabel,colorbar,axis,title,show
# the function that I'm going to plot
def z_func(x,y):
return (1-(x**2+y**3))*exp(-(x**2+y**2)/2)
x = arange(-3.0,3.0,0.1)
y = arange(-3.0,3.0,0.1)
X,Y = meshgrid(x, y) # grid of point
Z = z_func(X, Y) # evaluation of the function on the grid
im = imshow(Z,cmap=cm.RdBu) # drawing the function
# adding the Contour lines with labels
cset = contour(Z,arange(-1,1.5,0.2),linewidths=2,cmap=cm.Set2)
clabel(cset,inline=True,fmt='%1.1f',fontsize=10)
colorbar(im) # adding the colobar on the right
# latex fashion title
title('$z=(1-x^2+y^3) e^{ -(x^2+y^2)/2}$')
show()
qui produit
Cependant, les échelles de l'axe et les limites ne correspondent pas au réel des données x et y(qui sont tous les deux entre -3 et 3). Comment faire pour les faire correspondre à des données réelles?
- La recherche de la matplotlib
imshow
docs et ici, à StackOverflow pour plus d'informations sur leextent
argument deimshow
. Par exemple, stackoverflow.com/questions/6999621/... et matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow - Vous pouvez ajouter la
extent
paramètre à l'appel àcontour
ainsi. - Une petite erreur: le titre ne correspond pas à la fonction de tracé. La version correcte doit être
title('$z=(1-(x^2+y^3)) e^{ -(x^2+y^2)/2}$')
Vous devez vous connecter pour publier un commentaire.
Ajouter
extent=(-3, 3, 3, -3)
à l'appel àimshow
etextent=(-3, 3, -3, 3)
(note de l'malheureusement difficile de changer dans les panneaux!) à l'appel decontour
:imshow
vous voulezextent=(-3,3,3,-3)
je ne voudrais pas utiliser imshow pour le dessin 2d de la fonction, à cause de votre problème.imshow est pour, de surprise, de montrer des images. Les Axes d'étiquetage vient du nombre de "pixels". Vos valeurs.
Et pourquoi avez-vous importer des pme choses de numpy et certaines choses de pylab? numpy est inclus dans pylab.
Utilisation pcolor ou pour des matrices plus grandes pcolormesh.
La mesure de la barre de couleur de l'axe est déterminé par les valeurs min et max de
Z
.La mesure des axes x et y sur la parcelle sont des indices dans le tableau
Z
par défaut. À l'instar de Warren l'a souligné, vous pouvez changer la façon dont les axes sont étiquetés à l'aide de laextent
argument mot-clé àimshow
.ou plus généralement
extent
prend la faible x coord, puis x, puis de bas en y, puis de haute volée. La valeur par défaut de convention pour les images est à l'origine de l'axe des y pour démarrer dans le coin supérieur gauche. C'est pourquoi les deux dernières entrées dansextent
sont "inversés" à partir de ce que vous pourriez attendre.