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

3D Messwerte einfärben

 

Halja
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 31.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2007, 15:51     Titel: 3D Messwerte einfärben
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem:

Ich habe eine (mx5)-Matrix, in der in den ersten 3 Spalten x-,y- und z-Koordinaten stehen. Diese lasse ich mir im Moment mit plot3 als Punkte anzeigen.
Zusätzlich würde ich aber diese Punkte gerne in Abhängigkeit der 5.Spalte einfärben, so dass alle Koordinaten mit gleichem Wert in der 5.Spalte auch die gleiche Farbe haben.


Gruß
Halja
Private Nachricht senden Benutzer-Profile anzeigen


Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 31.10.2007, 18:59     Titel:
  Antworten mit Zitat      
das sollte mit scatter3 funktionieren. Ist aber langsam.

Code:

scatter3(x,y,z,15,farbe)
 


an vierter Stelle kann man auch einen Vektor übergeben, dann werden die einzelnen Punkte in verschiedener Grösse gezeichnet.
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Halja
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 31.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2007, 10:03     Titel:
  Antworten mit Zitat      
Danke erstmal für die Antwort.

Mit Scatter habe ich das auch probiert, aber bei fast 500 000 Punkten dauert das doch seine Zeit.
Mit plot3 bin ich im Grunde soweit zufrieden, da ich mir die Werte dort auch als Punkte in einer bestimmten Farbe anzeigen lassen kann.
Ich weiß nur nicht so richtig, wie ich es schreiben kann, dass diese Farbe automatisch, aber zufällig, nach der 5.Spalte gewählt wird, ohne dass ich sie vorher einstellen muss.
Im Moment habe ich es mit mit einer if-Abfrage gelöst, die schaut, ob sich in der letzten Spalte etwas ändert, und dann ggf die Farbe wechselt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 01.11.2007, 11:17     Titel:
  Antworten mit Zitat      
500.000 Punkte ist doch eine Menge .

Evtl.gibt es noch eine Möglichkeit:

Code:

hdl = plot3(x,y,z,'.')
 


liefert ja die Handles auf alle Punkte zurück. Evtl. kann man die Handles jetzt schrittweise einfärben nach dem Wert in Spalte 5. Das sollte um einiges schneller gehen.

Code:


colorvec = [1:100:10000];   %Grenzen der Einträge in Spalte 5 für jeweils eine andere Farbe

farbvec = jet(length(colorvec)); %Farbmatrix  in Regenbogenfarben

for ii = 1:length(colorvec) - 1

this_vec = intersect ( find( spalte_5 >= colorvec(ii)), find(spalte_5 <= colorvec(ii+1) ) ) %Index aller Einträge, die zwischen zwei Grenzwerten sind


set(hdl(this_vec),'Color',farbvec(ii,:));
end

 


so sollte es ungefähr funktionieren.
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 01.11.2007, 11:42     Titel:
  Antworten mit Zitat      
vergiss den obigen Beitrag - gibt ja nur ein handle für die gesamte Linie.

Vielleicht kann man aber die Daten irgendwie in 4dimensionale Matrizen umsortieren mit farbe als 4 dimension. So ähnlich wie plot auch 2D Matrizen dann mit verschiedener Linienfarbe einfärbt.

Oder Du strickst den obigen Code um und zeichnest jeweils Punkte einer Farbe auf einmal. Bei 8 Farben oder so sollte das noch halbwegs schnell gehen. Also

Code:

colorvec = [1:100:10000]; %Grenzen der Einträge in Spalte 5 für jeweils eine andere Farbe

farbvec = jet(length(colorvec)); %Farbmatrix in Regenbogenfarben

for ii = 1:length(colorvec) - 1

this_vec = intersect ( find( spalte_5 >= colorvec(ii)), find(spalte_5 <= colorvec(ii+1) ) ) %Index aller Einträge, die zwischen zwei Grenzwerten sind


plot3(x(this_vec),y(this_vec),z(this_vec),'.','Color',farbvec(ii,:));
end

 

_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.