Verfasst am: 11.10.2021, 15:42
Titel: Abschnitt von einem Vektor verwenden
Hallo zusammen,
ich habe eine Tabelle mit 3 Spalten und n Zeilen.
1. Spalte: time
2. Spalte: x-Wert
3. Spalte: y-Wert
Ich möchte jetzt einen Startzeitpunkt auswählen, also tStart = 2 beispielsweise (manuelle Eingabe im Programm).
Ab diesem Wert t(n) >= tStart möchte ich die x- und y-Werte, also x(n) und y(n), auslesen und alle vorherigen ignorieren bis zu einem Endzeitpunkt t(n) <= tEnd.
Danach möchte ich die Punkte aus dem Abschnitt mit den x und y-Werten mit scatter plotten.
Wie mache ich das am besten?
if- oder for-Schleife?
generell ist es leichter, wenn du die Datei als solche anhängst statt einen Screenshot davon. Dann kann man Vorschläge direkt ausprobieren.
Eine Schleife sollte jedenfalls nicht nötig sein, stattdessen kann man logische Indizierung verwenden.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Vielen Dank für die super schnelle Antwort Harald.
Bei mir handelt es sich eigentlich um eine sehr große .csv-Datei.
Diese ist noch nicht schön unterteilt in die Werte, die ich benötige (time, x, y).
time steht in der ersten Spalte, aber in der zweiten Spalte steht ein Vektor mit (x,y,z).
Daher habe ich erst aus der .csv-Datei eine .mat-Datei erzeugt.
Daraus kann ich dann die Werte besser auslesen (komischer Zwischenschritt vermutlich).
Ich habe mal sowohl die ursprüngliche .csv-Datei, als auch einen Ausschnitt aus der erzeugten .mat-Datei angehängt zur Klärung.
Anscheinend kann ich die -mat-Datei nicht so einfach mit data einlesen, richtig?
Die x-Werte sind teils komplex und z.B. in Zeilen 70 und 71 mit unendlichem Imaginärteil. Soll das so sein?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
So sieht mein Codeabschnitt zum Import der main.csv aus.
Ich muss die Daten mehrfach trennen (delimiter) und doubles aus den Einträgen machen, um diese zu verwenden.
Ich habe keine schönere Möglichkeit gefunden bisher. Es funktioniert aber
%% Import CSV
Import = readtable('main.csv', 'delimiter', {'|', ',','('},'VariableNamingRule','modify');
data = Import(1:end , 1:5);
data.Properties.VariableNames = {'time', 'empty','xOrg', 'yOrg','zOrg'}; %name the columns of the table
%% Make doubles out of table
time = data(:,1);
XOrg = data(:,3);
YOrg = data(:,4);
nums = [XOrg{:,1}];
x = nums(:,1);
nums = [YOrg{:,1}];
y = nums(:,1);
nums = [time{:,1}];
t = nums(:,1);
%% Zeit Unterteilung
% selected = data.time >= tStart & data.time <= tEnd; %if x- and y- would be doubles in data % scatter(data.x(selected), data.y(selected)); %if x- and y- would be doubles in data
selected = t >= tStart & t <= tEnd;
scatter(x(selected), y(selected));
Anschließend verwende ich kein scatter sondern füge ein Hintergrundbild in Graustufen ein und plotte eine Art heatmap mit scatplot über das Bild.
Leider sind die Einträge dann an der y-Achse umgekehrt und ich bekomme die Punkte nicht transparent. Das ist aber ein neues Problem...
Die x-Werte sind teils komplex und z.B. in Zeilen 70 und 71 mit unendlichem Imaginärteil. Soll das so sein?
Daran kann ich leider nichts ändern. Ich mache aus den Werten Realteile mit real() und die unendlichen Werte würde ich am liebsten streichen bzw. nicht abbilden lassen.
Eventuell musst du dann auch das Bild spiegeln, z.B. mit flipud.
Für Transparenz müsstest du dir ansehen, wie dieses scatplot arbeitet. Normalerweise geht das über die Eigenschaft FaceAlpha.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.