Verfasst am: 03.12.2009, 14:24
Titel: 2D-Plot mit Interpolation und farbcodiertem Verlauf
Hallo,
ich möchte einen 2D-Plot erzeugen, der dem angehängten Bild entspricht.
Für jede Stelle an der ein rotes Kreuz ist gibt es einen Vektor mit Daten im Zeitverlauf.
Der Plot soll nun so laufen, dass er zu einem anzugebenden Zeitpunkt t aus allen Vektoren den entsprechenden Wert nimmt, diese der jeweiligen "Stelle" zuordnet, zwischen den Werten interpoliert und den Verlauf dann mit Höhenlinien und farbcodiert darstellt.
Ich weiß leider nicht wie ich da rangehen soll.
Bisher schweben mir folgende Teilprobleme vor:
1. Wie erzeuge ich die Geometrie und die Zuordnung welcher Punkt mit welchem Vektor belegt wird?
2. Wie mache ich die Interpolation bezogen auf die Fläche zwischen den Punkten?
3. Wie erzeuge ich die Höhenlinien und die Farbcodierung?
Für detaillierte Tipps zum Vorgehen & zu nutzenden Befehlen wäre ich sehr dankbar.
also, ich bin bzgl. des Plots weitergekommen, die Darstellung über meshgrid und interp2 funktioniert ganz gut, u.U. auch mit contourf.
Problem: Um die Lage der Stützstellen zueinander (entsprechend meiner Geometrie) korrekt darzustellen, gibt es zwischen den Stützstellen der Ursprungsmatrix Punkte ohne Werte, d.h. x,y= 0,0 ist ein z-Wert zugeordnet und dann wieder 0,2,. 0,1 jedoch ist 'frei'.
Nun hätte ich gerne, dass die Funktion über diese leeren Stellen der Ursprungsmatrix einfach hinweginterpoliert, also von 0,0 zu 0,2. Das tut sie aber momentan nicht, sie sieht 0,1 als z=0 an und interpoliert entsprechend von der Stelle 0,0 zu 0,1 (also z=0) und dann weiter vo 0,1 zu 0,2. Dies verpasst meiner Oberfläche dann unschöne Dellen in Richtung z=0, die eigentlich nicht da sein dürfen.
ich verstehe die Frage nicht ganz.
Z ist ja eine rechteckige Matrix. Dass an einzelnen Stellen in dieser Matrix "nichts" steht, kann eigentlich nicht sein. Da kann höchstens 0 oder NaN stehen. In jedem Fall wird nichts anderes bleiben, als die Zeile oder Spalte, die diese Werte enthält, komplett zu löschen, oder die entsprechenden Einträge interpolieren zu lassen.
Ja klar, da steht 0 oder NaN. Aber in beiden Fällen interpretiert er es als 0 und sieht es als Stützstelle an.
Ich hab mich wohl nicht ganz klar ausgedrückt, versuche das nochmal mit Code zu erläutern:
Code:
position_X=[-4:1:4]; % Vektor x-Achse
position_Y=[4:-1:-4]; % Vektor y-Achse [X, Y] = meshgrid(position_X,position_Y); % Matrizen X und Y werden erstellt, Hauptgitter in 1-Schritten
Z ist in meinem Fall T und eine rechteckige Matrix, wie du richtig gesagt hast. Ich kann aber keine Zeile oder Spalte weglassen, weil in jeder irgendwo was steht (s.o.). Folglich muss ich auch diese "Lücken" des Hauptgitters interpolieren, und nicht nur die Bereiche zwischen den Hauptgitterpunkten, da sonst die genannten "Dellen" entstehen.
Problem ist: Wie mache ich das?
Hoffe das wird jetzt klarer, weiß leider nicht wie ich das präziser beschreiben soll.
das Problem ist hier, dass eine Matrix, die mit [] "vorbelegt" und sukzessive weiterbelegt wird, an den nicht explizit belegten Stellen mit Nullen gefüllt wird. Abhilfe: Statt T = [];
Hab ich ausprobiert. Dann funktioniert aber interp2 nicht, sondern erzeugt für alle Zi nur NaNs, was zur Folge hat, dass die Oberfläche über surf bzw. contourf überhaupt nicht dargestellt wird.
Werde mal weiter experimentieren mit anderen Interpolationsfunktionen. Wenn du noch ne Idee hast, imemr her damit! Und danke schonmal für die Hilfe.
Sieht so aus, als ob interp2 nur interpoliert und nicht extrapoliert. Ich sehe hier das Problem, dass du vergleichsweise wenig Daten hast.
Leider kann man mit deinem Beispiel schlecht experimentieren. Ich könnte mir aber vorstellen, dass es hilft, die Ecken T(1,1), T(1,9), T(9,1) und T(9,9) zu definieren.
Hab ne Lösung gefunden: Benutzung von griddata statt interp2. Da muss ich im Bezug auf das Hauptgitter nur mit Vektoren arbeiten statt mit Matrizen, so dass alle nicht belegten Punkte des Gitters einfach nicht vorkommen.
Danke für die Diskussion, im Austausch denkt sich's immer leichter!
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.