WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Datenauswertung einer Strömungsmessung

 

leecher
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 06.04.2017, 18:08     Titel: Datenauswertung einer Strömungsmessung
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.04.2017, 20:19     Titel:
  Antworten mit Zitat      
Hallo,

scatter3 mit vier Argumenten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 06.04.2017, 20:33     Titel:
  Antworten mit Zitat      
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)

Werte Excel.JPG
 Beschreibung:

Download
 Dateiname:  Werte Excel.JPG
 Dateigröße:  59.58 KB
 Heruntergeladen:  305 mal
matlab.JPG
 Beschreibung:

Download
 Dateiname:  matlab.JPG
 Dateigröße:  104.4 KB
 Heruntergeladen:  296 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.04.2017, 20:41     Titel:
  Antworten mit Zitat      
Hallo,

bitte die Dokumentation lesen.
Als 5. Argument kannst du Farben angeben, als 6. Argument 'filled' um die Punkte ausfüllen zu lassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 06.04.2017, 23:01     Titel:
  Antworten mit Zitat      
So, mein bisheriges Ergebnis
Code:
m = max(v);
s = (v.^3 / max(v)) * 20;
scatter3(x,y,z,s,v,'fill');
colormap(flipud(colormap));
colorbar
saveas(gcf,'grafik.emf')

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.ä?)

figure.jpg
 Beschreibung:

Download
 Dateiname:  figure.jpg
 Dateigröße:  43.24 KB
 Heruntergeladen:  295 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2017, 08:02     Titel:
  Antworten mit Zitat      
Hallo,

wenn dir die fertigen Colormaps nicht gefallen, kannst du dir ja selber welche basteln.

Code:
g = [0, 0.5, 0]; % green
y = [0.8, 0.8, 0]; % yellow
r = [0.5, 0, 0]; % red
figure
colormap([g; y; r])
colorbar
figure
rgb = interp1(1:3, [g; y; r], 1:0.1:3); % 10 levels between the colors
colormap(rgb)
colorbar


Bei colorbar kannst du 'Position' angeben - siehe Doku.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 07.04.2017, 15:52     Titel:
  Antworten mit Zitat      
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

Gruß

figure.jpg
 Beschreibung:

Download
 Dateiname:  figure.jpg
 Dateigröße:  44.17 KB
 Heruntergeladen:  320 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2017, 16:09     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal:

Code:
ax = gca;
ax.XTick = ...
ax.YTick = ...


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 07.04.2017, 18:00     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Code:
ax = gca;
ax.XTick = ...
ax.YTick = ...


Ich bekam leider folgenden Fehler:
Code:
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 Sad

Edit: So in etwa soll es dann aussehen, nur mit interpolierten Werten:
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2017, 19:54     Titel:
  Antworten mit Zitat      
Hallo,

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:
Code:


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.ä.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 07.04.2017, 20:25     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
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 Smile
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

[x,y,z] = meshgrid(0:50:300,0:50:300,0:5:20);
xslice = [];
yslice = [];
zslice = [0,5,10,15,20];
slice(x,y,z,v,xslice,yslice,zslice)

Funktioniert trotzdem nicht:
Code:
Error using slice (line 81)
V must be a 3-D array.

Was ich allerdings nicht verstehe, da mein v doch ne Matrix ist?!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2017, 20:43     Titel:
  Antworten mit Zitat      
Hallo,

Matrizen sind 2D, du brauchst 3D.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 07.04.2017, 21:33     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Matrizen sind 2D, du brauchst 3D.

Grüße,
Harald

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2017, 21:46     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
leecher
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 06.04.17
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 07.04.2017, 23:06     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

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.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.