0

Ich habe eine Textdatei, die Berechnungsergebnisse von einer zweidimensionalen (2D) Flussberechnung enthält. Ich möchte die Ergebnisse in Matlab darstellen. Ich habe so etwas oft vor Jahren gemacht, aber vergessen, wie und wäre sehr dankbar für jeden Rat.Matlab: Wie man eine 2D-Handlung/Animation von den Daten in einem einzelnen Vektor bildet?

Ein Ausschnitt einer Ergebnisdatei ist unten. Die linke Spalte ist der Zeitschritt (ich zeige nur Daten aus den Zeitschritten 45 und 46 als Beispiel; die Datei ist zu lang, um alle Daten zu übertragen). Die rechte Spalte ist der schwierige Teil für mich. Die rechte Spalte entspricht allen x-y-Punkten (also eine einzelne Spalte von 2D-Daten). Ich kenne die Anzahl der x-Werte und die Anzahl der y-Werte.

Mein Problem ist, dass ich nicht weiß, wie man die rechte Spalte für (i) 2-D-Plotten von (ii) einen einzigen Zeitschritt aufteilt.

45.0000 1.0000 
    45.0000 0.9742 
    45.0000 0.9542 
    45.0000 0.9521 
    45.0000 0.9480 
    45.0000 0.9436 
    45.0000 0.9388 
    45.0000 0.9326 
    46.0000 1.0000 
    46.0000 0.9742 
    46.0000 0.9542 
    46.0000 0.9521 
    46.0000 0.9480 
    46.0000 0.9436 
    46.0000 0.9388 
    46.0000 0.9326 

...

Ich möchte zunächst 2D-Plots der x- und y-Daten machen. Dann möchte ich sie animieren (d. H. Eine Grafik für jeden Zeitschritt; ich kann diesen Teil wahrscheinlich herausfinden). Der wichtigste Teil sind die 2-D-Plots. Wenn jemand so nett wäre, mir ein Beispiel zu zeigen, wie man ein 2D-Diagramm mit der richtigen Indizierung aus einem Datenvektor erstellt, wäre ich sehr dankbar.

+0

Sie haben also verschiedene Textdateien jeweils in verschiedenen Zeitschritten .... und Ihr Ziel ist es, bei jedem Zeitschritt die Daten zu jedem Zeitschritt in einem animierten Plot zu plotten? Zeigen Sie zum Beispiel im Zeitschritt 1 die Punkte ... warten Sie einige Augenblicke, dann zum Zeitpunkt Schritt 2, zeigen Sie die Punkte usw. an. Ich nehme an, dass jedes Mal der Schritt auf der horizontalen Achse liegt. Würde das im Wesentlichen wie ein Streudiagramm mit Punkten in jedem Zeitschritt aussehen? – rayryeng

+0

Danke für Ihre Antwort, rayryeng. Entschuldigung, ich war nicht klar. Ich habe eine Textdatei für jede Berechnung. Jede Textdatei enthält alle Ergebnisse. Ich möchte (1) für jeden Zeitschritt ein x-y-Diagramm erstellen und dann (2) alle Diagramme in einer Animation zusammenfügen. Der Teil, an dem ich am meisten feststecke, ist (1). Ich werde meine Frage bearbeiten, um sie klarer zu machen. – user3292696

+1

Also ein Verzeichnis gegeben, haben Sie Dateien und in jeder Datei, es wäre im Wesentlichen eine 2D-Matrix von Punkten. Sie möchten für jede Textdatei ein 2D-Diagramm erstellen ... Wenn Sie animiert sind, nehme ich an, dass Sie jede dieser Punkte separat anzeigen möchten ... Möchten Sie die Abbildung löschen und diese Punkte anzeigen oder hinzufügen? oben auf der Figur? Willst du ein neues Fenster? Sind die Namen der Dateien etwas Vernünftiges ... d. H. Gibt es eine bestimmte Reihenfolge, in der Sie sie auftragen sollen? Sie müssen weitere Informationen hinzufügen. Ich sollte nicht mehr Informationen wie diese fragen müssen – rayryeng

Antwort

0

Ich bin nicht absolut sicher, wenn ich Ihre Frage verstanden habe, so mache ich einige Annahmen.

Wie ich verstanden habe, gibt die erste Spalte den Zeitschritt und die zweite Spalte Ihre gemessenen Durchflussdaten. I unter der Annahme, dass die zum gleichen Zeitpunkt gemessenen Durchflussdaten an verschiedenen Positionen gemessen werden und Sie Ihr Durchflussprofil für jeden Zeitschritt grafisch darstellen möchten.

Dies kann für jeden Zeitschritt mit dem folgenden Code, dh ein separates Grundstück erfolgen:

mit allen Strömungsprofilen in einer Figur
%% separate plot for each timestep 
fid = fopen('test.txt'); 

while ~feof(fid) 
    C = textscan(fid,'%f %f',8); 
    figure(); 
    timestep = C{1}; 
    plot(C{2}); 
    title(num2str(timestep(1))); 
end 

Eine Animation kann mit dem folgenden Code erzeugt:

%% animation 
fid = fopen('test.txt'); 

figure(); hold on; 
while ~feof(fid) 
    C = textscan(fid,'%f %f',8); 
    timestep = C{1}; 
    plot(C{2}, 'DisplayName', num2str(timestep(1))); 

    pause(1); 
end 

hold off; 
legend show; 
+0

Vielen Dank, snalx. Ja, deine Annahmen sind richtig. Eine Sache, die ich tun muss, ist eine Handlung für jeden Zeitschritt zu machen. Im Beispiel in meiner Frage würde ich separate Diagramme für "45" und "46" benötigen. Gibt es eine Möglichkeit, einen separaten Plot zu erstellen, wenn sich die Werte in der linken Spalte ändern? Oder - wenn das nicht möglich ist - eine bestimmte Anzahl von Werten anzugeben, die in jedem Plot enthalten sein sollten? Für jeden Zeitschritt müssen immer die gleichen Werte angezeigt werden. Ich hoffe, ich bin hier klar. Vielen Dank. – user3292696

+0

Das obere Codebeispiel sollte mit sich ändernden Werten in der linken Spalte arbeiten, da Sie für jeden Zeitschritt 8 Messwerte haben. Haben Sie den Code mit Ihren Daten getestet? – snalx

+0

Vielen Dank, snalx. Ich hatte anfangs ein Problem, das nicht mit deinem Beispiel zusammenhängt, aber es ist behoben und jetzt funktionieren die Plots perfekt. Ich schätze deine ganze Zeit. Ich habe versucht, dich zu wählen, aber ich habe eine Nachricht erhalten, dass mein Ruf zu gering ist, um aufgezeichnet zu werden. – user3292696