Verfasst am: 06.04.2017, 18:08
Titel: Datenauswertung einer Strömungsmessung
Halli hallo,
da ich mich bisher noch nie mit MATLAB auseinandergesetzt habe und jetzt das erstemal damit konfrontiert werde, wollte ich euch um euren Rat bitten.
Ausgangslage:
Ich habe eine Punktewolke an Messdaten, die ich gerne in einer Grafik als 3D-Plot darstellen möchte. Jeder Punkt hat 3 Koordinaten (x,y,z) und den Messwert.
Für die Darstellung habe ich mir überlegt, dass ich ein Diagramm mit den 3 Raumkoordinaten habe und jeder Messwert über eine Kugel dargestellt wird. Je größer der Wert, desto größer die Kugel. Ich wollte damit die Strömung dreidimensional darstellen können.
Jetzt kommt die doofe Frage: Wie macht man sowas am besten?
Hi,
Die Funktion macht schon in etwa das was ich haben möchte, allerdings sollen die Punkte gefüllt und die Werteskale nicht von 0-1, sondern von min-max vom wert v gehen. Zusätzlich zur Größe wäre eine farbliche Anpassung (Also große rote Punkte für Max, bzw. kleine blaue Punkte für Min Werte von v)
Jetzt würde ich gerne noch die colormap & colorbar so anpassen, dass ich einen Farbverlauf von grün(max) über gelb(mitte) nach rot(min) habe. Habe da ewig recherchiert aber leider keine Lösung gefunden. Ebenso würde ich gerne die Höhe der Colorbar reduzieren wollen (gibt es da einen Scale Befehl o.ä?)
Hallo Harald,
Vielen Dank für die Tipps. Ich habe die Grafik jetzt fast schon so, wie es sein soll. Allerdings sollen meine Achsen nur Werte von 0 bis 300 (50erSchritte) bzw. 0 bis 20 (5er Schritte) anzeigen. Wenn ich die Grafik drehe, wird an der einen Achse plötzlich 400 angezeigt und die Schrittweite auf 200 geändert, dabei habe ich nur Werte bis 300
ax = gca;
ax.XTick = [0:5:50];
Warning: Struct field assignment overwrites a value with class
"double". See MATLAB R14SP2 Release Notes, Assigning Nonstructure
Variables As Structures Displays Warning, for details.
Ich wusste jetzt nicht, wie ich diese Argumente anwenden soll, in der Doku stand nichts zu diesen Befehlen...
Sorry dass ich nochmal nerve:
Ich hatte mir überlegt, die Daten evtl. doch anders darzustellen: Statt der Punkte eine interpolierte Ebene der Punkte. In diesem Bsp. wären das also insges. 4 Ebenen, die in z/Höhenrichtung übereinander im Abstand 5 gestapelt sind. Jede Ebene ist dann quasi ein interpolierter 2D-Plot aus den Punkten dieser Ebene. Sehr speziell, ich habe heute schon den ganzen Tag gegoogelt und nix gefunden
Edit: So in etwa soll es dann aussehen, nur mit interpolierten Werten:
du verwendest anscheinend ein Release älter als R2014b. So etwas solltest du bei deinen Fragen dazuschreiben oder noch besser im Profil eintragen. In älteren Releases:
Es gibt verschiedenste Befehle für Visualisierung. Eine Möglichkeit könnte sein, eine Schleife über surf oder pcolor zu verwenden. Eine weitere wäre slice o.ä.
du verwendest anscheinend ein Release älter als R2014b. So etwas solltest du bei deinen Fragen dazuschreiben oder noch besser im Profil eintragen.
Sorry, ich wusste nicht dass es da so große Unterschiede gibt. Wie gesagt, blutiger Matlab Anfänger
Ich habe versucht über slice das Problem zu lösen. Da ich aber nur den Betrag von v habe, habe ich jetzt einfach alle Werte für v_x und v_z mit 0 gefüllt.
Code:
x = xlsread('data.xlsx','test','A2:A325') %import X
y = xlsread('data.xlsx','test','B2:B325') %import Y
z = xlsread('data.xlsx','test','C2:C325') %import Z
v = xlsread('data.xlsx','test','D2:F325') %import V
sorry, ich steh da irgendwie aufm Schlauch. Welche Form muss mein v (wenn ich es aus Excel öffne) haben, damit ich ein 3D Array erhalte? Bzw. Wie muss ich meine Daten / Code anpassen?
bei Schwierigkeiten, eine Funktion anzuwenden, lohnt sich immer ein Blick in die See also-Liste der Dokumentation, in dem Fall
interp3
.
Mir scheint allerdings, dass du für jeden Punkt 3 Werte hast. Wie das zu interpretieren ist, ist mir nicht klar.
Grüße,
Harald
Vielen Dank für den Tipp mit
interp3
, leider hapert es bei mir mit der Vorstellung, wie mein Argument v aussehen muss.
Im Prinzip habe ich doch eine Punktewolke, wo jeder Punkt 4 Informationen beinhaltet: Die Koordinaten xyz und den Messwert v. Jetzt soll diese Punktewolke "gesliced" werden, dh. x,y Ebenen, deren Farbe über den Messwert (interpoliert über die Fläche) dargestellt wird.
Kannst du mir evtl. ein Minimalbeispiel geben, wie das grob aussehen muss? Gerade bei den Befehlen zu 3D-Arrays steige ich komplett aus, selbst nach stundenlangen googlen und Youtube.
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.