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

X, Y, Z mit surf darstellen

 

Muecke82
Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 11.01.2015, 18:13     Titel: X, Y, Z mit surf darstellen
  Antworten mit Zitat      
Hallo miteinander,

wie ihr schon mit bekommen habt bin ich nicht gerade der Schnellste vom verstehen der Programmierung Sad

Ich habe eine CSV Datei in der ein Haufen Müll ist und meine Koordinaten X Y und Z.

Dank euch habe ich es geschafft die Koordinaten Halbwegs gut
aus der CSV Datei in Variablen (Matrix) zu exportieren.

jetzt würde ich das ganze gerne Grafisch darstellen.
AndyAndyAndy hat da schon einen schönen und für mich 1A Versuch gemacht
doch leider schnalle ich das nicht Sad und bekomme das nicht hin.
hier ist der Beitrag von Ihm: << Hier >>

Ich arbeite in zwischen mit Matlab 2014B auf einem iMac.



Die Musterdatei habe ich hier angehängt (CSV als ZIP)

das ist der Code mit der ich die Koordinaten heraus löse.
ich bekomme aber die Fehlermeldung:
"Data dimensions must agree."

ich verstehe nur nicht wie das genau gemeint ist?
die Variablen X Y Z sind die Falsch angeordnet?
anstelle Horizontal Vertikal? oder wie muss ich das verstehen?

Code:
% Alles Löschen und Schließen
clear all
clc

% Datei Öffnen
    fileID = fopen('CSV/replay.csv');
    Y_Anzahl = 679;    
   
  %  fileID = fopen('CSV/Test_3D.csv');
  %  Y_Anzahl = 10;
   
% Y - Auslesen
    formatSpec_y  = [repmat('%*s ', 1, 9), repmat('%f ', 1, Y_Anzahl)];
    textscan(fileID, '%[^\n\r]', 11);
    dataArray = textscan(fileID, formatSpec_y, 1, 'Delimiter', ',');
    Y = [dataArray{1:end-1}];
    clearvars formatSpec_y dataArray;
   
% X & Z Auslesne
    formatSpec_x_z  = [repmat('%f ', 1, 1), repmat('%*s ', 1, 8), repmat('%f ', 1, Y_Anzahl)];
    data_x_z        = textscan(fileID, formatSpec_x_z, 'Headerlines', 0, 'Delimiter', ',');
    Samlung_x_z     = cell2mat(data_x_z);
    X = Samlung_x_z(1:end,1);
    Z = Samlung_x_z(1:end, 2:end);
    clear formatSpec_x_z data_x_z Samlung_x_z;
   
% Datei Schließen
    fclose(fileID);
    clear fileID ans;
       
% Daten Visualisiren
    surf (X, Y, Z)

% labels
    xlabel('X-Achse');
    ylabel('Y-Achse');
    zlabel('Z-Achse');  
   
   
disp('Programm Ende')



ich wies das ich nicht der Hellste bin auf dem Gebiet, doch Ihne euch schaffe ich das nicht Crying or Very sad Crying or Very sad


ach ja,
Y Werte die Werte für Rechts Links
Z Werte sind Höhenangaben
Y Werte definiert die Tiefe


wie muss ich denn die Daten nun aufbereiten?

muss ich da jetzt ein Neue Variable erstellen?

XYZ = X, Y, Z

und das so das alle Punkte immer zusammen sind? die zusammen gehören? oder wie muss ich mir das vorstellen?



wenn das so in der Art aussehen würde wäre das genial:





EDIT: Ok einen der vielen Fehler habe ich gefunden,
ich habe bei den Y Werten einen zu wenig eingelesen Sad klar dann stimmt die Anzahl nicht !!!!
im Code Zeile 16 dort ist das "-1" das habe ich raus genommen,
jetzt kommt kein Fehler mehr Smile

doch das sieht grausig aus was ich anzeige Sad
bei AndyAndyAndy sieht das viel besser aus,
weshalb?
ist das so weil ich zu viel auf einmal anzeigen möchte?

Bildschirmfoto 2015-01-11 um 18.11.53.png
 Beschreibung:
das Bild im Beitrag

Download
 Dateiname:  Bildschirmfoto 2015-01-11 um 18.11.53.png
 Dateigröße:  91.75 KB
 Heruntergeladen:  407 mal
replay.csv.zip
 Beschreibung:
Das sind die Musterdaten, aus denen die X Y Z Daten heraus geholt werden.

Download
 Dateiname:  replay.csv.zip
 Dateigröße:  9.3 MB
 Heruntergeladen:  469 mal

_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.01.2015, 19:29     Titel:
  Antworten mit Zitat      
Code:
% Daten Visualisiren
[X1,Y1]=meshgrid(X(1:3:round(end/3)),Y);
mesh(X1, Y1, Z(1:3:round(end/3),:)')
colormap('bone')
view(-21,74)

geht eigendlich wenn man ein wenig an der sicht rumspielt
kleine anmerkungen:
Code:
der header ist sehr schlecht. das macht das debuggen unmöglich... und das sollte man nicht machen.
zu deinem plot. mehr punkte plotten als dein bildschirm auflösung hat ist meist unnötig. darum habe ich das auch oben eingekürzt
grüße winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 11.01.2015, 19:36     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Code:
% Daten Visualisiren
[X1,Y1]=meshgrid(X(1:3:round(end/3)),Y);
mesh(X1, Y1, Z(1:3:round(end/3),:)')
colormap('bone')
view(-21,74)

geht eigendlich wenn man ein wenig an der sicht rumspielt

das ist mal genial, Danke,
jetzt muss ich mich dran machen deinen Code zu verstehen Smile
das dauert noch eine Weile, habe für den Oberen teil schon etwas Sejr lange gebraucht.


Winkow hat Folgendes geschrieben:

kleine anmerkungen:
Code:
der header ist sehr schlecht. das macht das debuggen unmöglich... und das sollte man nicht machen.
zu deinem plot. mehr punkte plotten als dein bildschirm auflösung hat ist meist unnötig. darum habe ich das auch oben eingekürzt
grüße winkow


Öm wie meinst du das?

ich dachte so Lösche ich zu beginn erst mal alles und wenn dann Fehler aufkommen dann bekomme ich die angezeigt etc.
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.01.2015, 20:00     Titel:
  Antworten mit Zitat      
Muecke82 hat Folgendes geschrieben:

Öm wie meinst du das?

ich dachte so Lösche ich zu beginn erst mal alles und wenn dann Fehler aufkommen dann bekomme ich die angezeigt etc.

jup alles. auch die debug marken.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 11.01.2015, 20:05     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Muecke82 hat Folgendes geschrieben:

Öm wie meinst du das?

ich dachte so Lösche ich zu beginn erst mal alles und wenn dann Fehler aufkommen dann bekomme ich die angezeigt etc.

jup alles. auch die debug marken.


das ist doch dann nichts Schlechtes? oder?
wenn ich vor Programm Start alles Lösche, denn dann bekomme ich nur die Fehler angezeigt die das Programm hat?
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.01.2015, 20:16     Titel:
  Antworten mit Zitat      
Muecke82 hat Folgendes geschrieben:
das ist doch dann nichts Schlechtes? oder? ?

doch ^^ sonst hätte ich dich ja nicht drauf hingewiesen Wink. wie gesagt. du kannst keine debug markierungen setzen wenn du clear all benutzt. das erschwert das debuggen ungemein und alles was das debuggen erschwert sollte man sich abgewöhnen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 11.01.2015, 22:10     Titel:
  Antworten mit Zitat      
OK, ich schmeiße den teil wider raus Smile *danke für den hinwies*


Jetzt aber mal kurz zu den Daten, also mit deinem Code komme ich noch nicht ganz klar, las mich aber mal eine Zwischen Frage Stellen,

meine Y Daten haben ja nur eine Horizontale reihe an Werten
meine X Daten haben ja nur eine Vertikale Reihe an Werte

du hast jetzt die X & Y Daten erst mal wie die Z Daten aufgebaut,
sprich die Y Horizontale reihe Vertikal nach unten Kopiert
sprich die X Vertikale Reihe Horizontal nach rechts Kopiert

so das Jeder Z Wert den X und Y wert wider hat?

das kann ich gemeindlich auch schon Oben machen?
denn ich möchte mit den Daten ja noch was Rechnen.

einen Ausschnitt kann ich dann auch bei der Visualisierung selbst dann noch auswählen?

nur das ich das Grundprinzip schon mal richtig verstanden habe?
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.01.2015, 23:01     Titel:
  Antworten mit Zitat      
Muecke82 hat Folgendes geschrieben:
das kann ich gemeindlich auch schon Oben machen?
denn ich möchte mit den Daten ja noch was Rechnen.
was hällt dich davon ab mit den werten zu rechnen ?
meshgrid macht das von dir beschriebene. damit man eine zuordnung von z zu x und y werten hat. ich hab das gemacht damit es einfacher ist mit den werten zu rechnen. mesh würde das sonst auch alleine intern machen falls das nicht vorher gemacht wurde. sihe dazu auch die doc von mesh bzw meshgrid
Zitat:
einen Ausschnitt kann ich dann auch bei der Visualisierung selbst dann noch auswählen?

ja kann man schon. ist aber einfacher wenn man gleich nur seinen ausschnitt plottet. da sonst unnötig daten geplottet werden die du eh nicht sehen kannst. das macht das ganze etwas unhandlich. ich hab oben bereits nur jeden 3. datenpunkt entlang der x achse genommen und auch nur ein drittel des bauteils. wenn du alles plottest siht es erstmal nicht gut aus und 2. ist es sehr langsam zu rotieren etc. er verschiebt ja dann punkte die du eh nicht sehen kannst das deine auflösung vom bildschirm kleiner ist als die anzahl der punkte die du plottest.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 11.01.2015, 23:17     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Muecke82 hat Folgendes geschrieben:
das kann ich gemeindlich auch schon Oben machen?
denn ich möchte mit den Daten ja noch was Rechnen.
was hällt dich davon ab mit den werten zu rechnen ?

bis jetzt nihcts nur die Tatsache das ich noch nicht dahinter gekommen bin wie das geht Smile, kommt heute Nacht hoffentlich noch, ... werde nciht locker lassen.

Winkow hat Folgendes geschrieben:

Zitat:
einen Ausschnitt kann ich dann auch bei der Visualisierung selbst dann noch auswählen?

ja kann man schon. ist aber einfacher wenn man gleich nur seinen ausschnitt plottet. da sonst unnötig daten geplottet werden die du eh nicht sehen kannst. das macht das ganze etwas unhandlich. ich hab oben bereits nur jeden 3. datenpunkt entlang der x achse genommen und auch nur ein drittel des bauteils. wenn du alles plottest siht es erstmal nicht gut aus und 2. ist es sehr langsam zu rotieren etc. er verschiebt ja dann punkte die du eh nicht sehen kannst das deine auflösung vom bildschirm kleiner ist als die anzahl der punkte die du plottest.


da haben wir glaube ich aneinander vorbei geredet.

ich dachte das Aufbereiten der Daten, also X Y auf die Größe von Z vorbereiten, mit Auswahl meinte ich dann, das ich dann aus den schon vollständig aufbereiteten Daten einen teil heraus nehmen kann um denn dann anzuzeigen.

oder liege ich jetzt Falsch?

denn wenn ich alle Daten schon richtig Formatiert habe sprich X Y Z
dann könnte ich damit Berechnungen Durchführen etc.
und mir aber nur 10 Z Werte ausgeben lassen


Was ich noch Fragen wollte ist es Möglich jeden einzelnen Punkt auch eine Farbe mit zu geben?
z.B. Color_XYZ = RGB(10,20,100) oder so was?

denn wenn ich dann was berechne und bestimmte Punkte Identifiziere könnte ich die in einer andern Farbe hinterlegen lassen Smile

Ja dann geht der Farbverlauf von Dunkel zu Hell verloren was ich aber glaube ich nicht so schlimm finden würde. *Glaube ich*

oder noch besser, wenn keine Farbe hinterlegt ist dann soll der Punkt sich an den "colormap" halten und wenn eine Farbe angegeben ist dann soll er in der Farbe dargestellt werden, ist so was Möglich?
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.01.2015, 00:16     Titel:
  Antworten mit Zitat      
Zitat:
ich dachte das Aufbereiten der Daten, also X Y auf die Größe von Z vorbereiten, mit Auswahl meinte ich dann, das ich dann aus den schon vollständig aufbereiteten Daten einen teil heraus nehmen kann um denn dann anzuzeigen.

oder liege ich jetzt Falsch?

denn wenn ich alle Daten schon richtig Formatiert habe sprich X Y Z
dann könnte ich damit Berechnungen Durchführen etc.
und mir aber nur 10 Z Werte ausgeben lassen

ja dann beschrenkst du das nicht bei meshgrid sondern erst später
farbig machen kann man das auch dazu guckst du am besten in die docu. ich hab das mal mit collormap('bone') gemacht damit es so ählich wie dein bild aussiht. man kann die farben auch einstellen wie in den surface proerties. oder man kann einzelne punkte einfach mit plot3 markieren
Code:
% Datei Öffnen
    fileID = fopen('replay.csv');
    Y_Anzahl = 679;    
   
  %  fileID = fopen('CSV/Test_3D.csv');
  %  Y_Anzahl = 10;
   
% Y - Auslesen
    formatSpec_y  = [repmat('%*s ', 1, 9), repmat('%f ', 1, Y_Anzahl)];
    textscan(fileID, '%[^\n\r]', 11);
    dataArray = textscan(fileID, formatSpec_y, 1, 'Delimiter', ',');
    Y = [dataArray{1:end}];
   
   
% X & Z Auslesne
    formatSpec_x_z  = [repmat('%f ', 1, 1), repmat('%*s ', 1, 8), repmat('%f ', 1, Y_Anzahl)];
    data_x_z        = textscan(fileID, formatSpec_x_z, 'Headerlines', 0, 'Delimiter', ',');
    Samlung_x_z     = cell2mat(data_x_z);
    X = Samlung_x_z(1:end,1);
    Z = Samlung_x_z(1:end, 2:end)'; %transponieren eingefügt
   
   
% Datei Schließen
    fclose(fileID);
   
       
% Daten Visualisiren
[X1,Y1]=meshgrid(X,Y);
% fullscreen figure
figure('units','normalized','outerposition',[0 0 1 1])
% ausschnitt plotten
mesh(X1(100:300,500:1500),Y1(100:300,500:1500), Z(100:300,500:1500),'EdgeAlpha',0.4,'FaceAlpha',0.4)
colormap('bone')
view(-21,74)
hold all
indx=150;
indy=600;
%punkt makieren
plot3(X1(indx,indy),Y1(indx,indy),Z(indx,indy),'markersize',20,'color','red','marker','*','LineWidth',3)
% labels
    xlabel('X-Achse');
    ylabel('Y-Achse');
    zlabel('Z-Achse');  
   
   
disp('Programm Ende')

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 00:33     Titel:
  Antworten mit Zitat      
ich glaube es ja nicht, ... das scheint so leicht zu sein, ...
und ich breche mir hier einen ab und überlege wie das geht das ich die Y
werte Kopien kann, ...

ich glaube ich habe das aber jetzt verstanden.
wenn
Code:

geschrieben wird dann macht Matlab das automatisch?

und ich habe die neue Koordinaten richtig angeordnet schon in X1 bzw. Y1 Stehen?

Damit könnte man dann jetzt auch was Berechnen?

Oh man da habe ich mir was vorgenommen, ....


um jetzt einen Ausschnitt aus den Daten zu bekommen, machst du einfach:
z.B.
Code:
X1(100:300,500:1500)

also Wählst du nur den Teil von Links nach rechts 100 bis 300
und von Oben nach unten 500 bis 1500
aus.
und das wird dann angezeigt.

Da die Farbe jetzt nicht so veränderbar ist bzw. dann wahrscheinlich auch nicht richtig zu sehen wäre bei einem Punkt, ist das "plot3" da,
somit wenn cih was Berechne und einen Punkt farbig darstellen möchte dann Speicher ich denn in ein Extra Array Color_Darstellung(X, Y, Z) das ich dann durchlaufen lassen kann um die Punkte mir darzustellen.

Das ist Gut, eigentlich schon Perfekt.

Jetzt muss ich das für mich noch so machen das ich nicht immer einen Schrecken bekomme wenn ich den Code aufrufe, dann muss ich mir überlegen wie und was ich berechnen möchte.


Du bist mein "Tagesheld" DANKE.
deinen Code werde ich noch ein wenig durcharbeiten müssen und nachschlagen müssen das ich das alles verstehe und halbwegs anwenden kann.

Danke.

Ich komme wider, keine Frage, .. Wink



du hast in Zeile:
Code:
   Z = Samlung_x_z(1:end, 2:end)'; % transponieren eingefügt

das ' eingefügt
und das Kommentar, jedoch sagt mir beides nichts Sad
was ist das?
*bin kein gelehrter Sad(*
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.01.2015, 12:10     Titel:
  Antworten mit Zitat      
Muecke82 hat Folgendes geschrieben:

du hast in Zeile:
Code:
   Z = Samlung_x_z(1:end, 2:end)'; % transponieren eingefügt

das ' eingefügt
und das Kommentar, jedoch sagt mir beides nichts Sad
was ist das?
*bin kein gelehrter Sad(*

was der operator macht kannst du in der doc nachlesen. was transponieren ist kann man zur not auch googlen falls man das nicht weis Smile
hintergrund ist das dein x die dimension n hat und y die dimension m meshgrid macht daraus eine mxn matrix dein z hast du aber in der form nxm angeordnet. das musste ich korrigieren.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 12:20     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Muecke82 hat Folgendes geschrieben:

du hast in Zeile:
Code:
   Z = Samlung_x_z(1:end, 2:end)'; % transponieren eingefügt

das ' eingefügt
und das Kommentar, jedoch sagt mir beides nichts Sad
was ist das?
*bin kein gelehrter Sad(*

was der operator macht kannst du in der doc nachlesen. was transponieren ist kann man zur not auch googlen falls man das nicht weis Smile
hintergrund ist das dein x die dimension n hat und y die dimension m meshgrid macht daraus eine mxn matrix dein z hast du aber in der form nxm angeordnet. das musste ich korrigieren.


Ah du vertauschst so n & m in der Position Smile so das es wider stimmt.
Raffiniert.

Irgend wie hat das mit normalen programmiertechnischen nichts zu tun Sad
alles etwas verwirrend.

Danke.
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
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 - 2025 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.