Python: 2D-color map, die mit imshow
Ich versuche darstellen, eine Funktion von zwei Variablen auf einer zweidimensionalen Grafik mit Farbe.
Ich stieß auf dieses Beispiel hier:
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()
produziert
Jedoch, die achsenskalierung und-Grenzen entsprechen nicht dem realen x-und y-Daten(beide sind zwischen -3 und 3). Wie man Ihnen entsprechen die tatsächlichen Daten?
- Suche die matplotlib
imshow
docs und hier bei StackOverflow für Informationen über dieextent
argumentimshow
. Zum Beispiel, stackoverflow.com/questions/6999621/... und matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow - Sie wollen fügen Sie die
extent
parameter zum Aufrufcontour
als gut. - Ein kleiner Fehler: der Titel entspricht nicht der Funktion gezeichnet werden. Die richtige version sollte
title('$z=(1-(x^2+y^3)) e^{ -(x^2+y^2)/2}$')
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen
extent=(-3, 3, 3, -3)
um den Anruf zuimshow
undextent=(-3, 3, -3, 3)
(Hinweis der leider schwierig zu ändern in Zeichen!) der Aufrufcontour
:imshow
Sie wollenextent=(-3,3,3,-3)
würde ich nicht verwenden, imshow zum Plotten einer 2d-Funktion, weil zu Ihrem problem.imshow ist, überraschung, der Anzeige von Bildern. Die Achsen-Beschriftung kommt aus der Anzahl der "Pixel". Deine Werte.
... Und warum tun Sie importieren KMU, die Dinge aus numpy und einige Dinge, die von pylab? numpy ist enthalten in pylab.
Verwenden pcolor oder für größere arrays pcolormesh.
Den Umfang der Farbskala Achse wird bestimmt, indem die min-und max-Wert
Z
.Den Umfang der x-und y-Achsen auf dem Grundstück sind die Indizes im array
Z
standardmäßig. Als Warren wies darauf hin, Sie können ändern, wie die Achsen beschriftet mit derextent
keyword argument zuimshow
.oder generell
extent
dauert die niedrigen x-coord, dann hoch x, dann low-y, dann hoch y. Die Standard-Konvention für die Bilder ist der Ursprung der y-Achse starten in der oberen linken Ecke. Dies ist der Grund, warum die letzten beiden Einträge inextent
sind "Umgekehrt" von dem, was Sie erwarten könnte.