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
2D-Plot mit Farbverlauf (Farbverlauf durch Werte aus Vektor)
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
schau dir mal `pcolor` und `pcolormesh` an. Hier ist ein Beispiel für ersteres: http://matplotlib.sourceforge.net/examp ... _demo.html
Grüße
Gerrit
oh man, das ist ja genau das was ich suche. wie konnte ich das denn übersehen
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
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
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:
(brauche ich meshgrid überhaupt oder ginge auch direkt pcolor(x,y,Z)?)
erhalte aber immer den Fehler:
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.
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()
erhalte aber immer den Fehler:
(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)?
mask = ma.getmaskarray(C)[0:Ny-1,0:Nx-1]+xymask
IndexError: too many indices
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.
Hi,
meiner Ansicht nach macht das hier keinen Sinn:
Das sollten ja eigentlich die Koordinaten deines Diagramms werden.
Probier mal:
(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).
meiner Ansicht nach macht das hier keinen Sinn:
Code: Alles auswählen
x = random(100)
y = random(100)
Probier mal:
Code: Alles auswählen
x=arange(1,100.1,1)
y=arange(1,100.1,1)
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).