2D-Plot mit Farbverlauf (Farbverlauf durch Werte aus Vektor)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TheTraina
User
Beiträge: 3
Registriert: Dienstag 19. Oktober 2010, 22:04

Hallo zusammen :),

ich habe eine wahrscheinlich ziemlich einfache Frage, habe aber leider in der Matplotlib-Documentation nicht das gefunden was ich brauche.

Ich möchte gerne einen 2D-Plot erzeugen wie folgt: Ich habe 2D-Punkte gegeben durch zwei Vektoren: Einer speichert alle x-Werte, der andere alle y-Werte. Ich habe einen dritten Vektor, in dem zu jedem Paar (x,y) ein weiterer Wert (dieser repräsentiert einen Fehler an dem Punkt (x,y) ) gespeichert ist. Diese den Paaren (x,y) zugeordneten Werte sollen mithilfe eines (wenn möglich fließenden) Farbverlaufes dargestellt werden; ähnlich wie das zweite Bild auf http://matplotlib.sourceforge.net/examp ... nterp.html. Die Farben sollen die dritten Werte (Fehlerwerte) illustrieren. Ich brauche dabei also auch eine colorbar, die mir sagt, welche Farben einen hohen Wert und welche Farben einen niedrigen Fehlerwert im Fehlerverlauf repräsentieren.


Vielen Dank :wink:
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hallo und Willkommen,

schau dir mal `pcolor` und `pcolormesh` an. Hier ist ein Beispiel für ersteres: http://matplotlib.sourceforge.net/examp ... _demo.html

Grüße
Gerrit
TheTraina
User
Beiträge: 3
Registriert: Dienstag 19. Oktober 2010, 22:04

oh man, das ist ja genau das was ich suche. wie konnte ich das denn übersehen :oops:

werd mich heut nachmittag sofort daran begeben und das für meinen fall ausprobieren. wenn fragen auftreten, meld ich mich nochmal.
in jedem fall schon mal danke dir gerrit :D
TheTraina
User
Beiträge: 3
Registriert: Dienstag 19. Oktober 2010, 22:04

habe das mal versucht umzusetzen
x,y,Z seien Vektoren gleicher Größe (z.B. 100; in meiner Anwendung wird die Größenordnung bei mehreren 10000 liegen). Alle Vektoren x,y,Z enthalten double-Werte; bei x und y Werte zwischen 0 und 1, bei Z in der Größe beliebig, aber positiv (als Beispiel auch mal in (0,1) verteilt). Dann sollte folgendes ja eigtl. funktionieren:

Code: Alles auswählen

#from __future__ import division
#from matplotlib.patches import Patch
from pylab import *

x = random(100)
y = random(100)
Z = random(100)
X,Y = meshgrid(x, y)
pcolor(X,Y,Z)
colorbar()
(brauche ich meshgrid überhaupt oder ginge auch direkt pcolor(x,y,Z)?)
erhalte aber immer den Fehler:

mask = ma.getmaskarray(C)[0:Ny-1,0:Nx-1]+xymask
IndexError: too many indices
(gleiche Meldung bei 'pcolormesh' anstatt 'pcolor') woran liegt der fehler? kann es sein, dass 'pcolor' und 'pcolormesh' quasi nur mit einem gleichmäßigen gitter zurecht kommt (wie im Beispiellink gepostet von gerrit)?

ich will ja eigtl. nur jedem punkt (x,y) je nach Größe des Wertes Z den entsprechenden Punkt in einer entsprechenden Farbe zeichnen lassen. Dies ginge natürlich auch darüber, dass ich mir vorher einen Farbenvektor (zum Beispiel mit 10 Farben) definiere und einem Punkt je nach Größe von z eine bestimmte Farbe zuweise. Ich würde aber lieber einen fließenden Farbverlauf haben mit 'colorbar' und nicht extra eine diskrete Anzahl an Farben festsetzen.
F.S.
User
Beiträge: 7
Registriert: Donnerstag 17. Juni 2010, 09:51

Hi,


meiner Ansicht nach macht das hier keinen Sinn:

Code: Alles auswählen

x = random(100)
y = random(100)
Das sollten ja eigentlich die Koordinaten deines Diagramms werden.

Probier mal:

Code: Alles auswählen

x=arange(1,100.1,1)
y=arange(1,100.1,1)
(oder wie groß du die Schritte eben haben magst)
Dann hast du nach dem meshgrid ein Netz, das alle Punkte deines Diagramms beschreibt und du kannst ihnen jeweils einen Wert zuweisen (bei deinem bisherigen Code hattest du manche Punkte mehrfach, manche garnicht).
Antworten