|
Autor |
plotyy in einer Schleife |
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Themenstart: 2018-07-05
|
Hallo Ich habe folgendes Problem.
Ich möchte gerne einen Plot mit 2 verschiedenen Y-Achsen (mit gemeinsamer x-Achse)innerhalb einer Schleife plotten.
Konkret heißt das bei mir, ich lese in einer Schleife zu verschiedenen Messzeiten (t) (entspricht der x-Achse) jeweils ein Windprofil U (y1-Achse) in Abhängigkeit zu einer Höhe (Y-Achse 2) ein.
Jetzt möchte ich das ganze innerhalb dieser Schleife plotten.
Mein Code sieht so aus:
\sourceon nameDerSprache
[ax, h1,h2] =plotyy(t,U_mag,t,Hoehe);
hold (ax(1),'on')
hold (ax(2),'on')
set(get(ax(1),'Ylabel'),'String','Velocity U [m/s]','FontWeight','Bold')
set(get(ax(2),'Ylabel'),'String','Hoehe [m]','FontWeight','Bold')
xlabel ("Time[s]");
title("Velocity Profiles");
plot(ax(1), t,U_mag);
hold on
plot(ax(2), t,Hoehe);
hold on
\sourceoff
https://matheplanet.com/matheplanet/nuke/html/uploads/b/42550_Zwischenablage-2.jpg
Es erzeugt mir den Plot den ich möchte, jedoch werden die Zeiten immer überschrieben, so dass ich am Ende die letzte Zeit mit dem letzten Windprofil und Höhe sehe. Ich möchte aber alle Windprofile zu allen Zeiten und Höhe plotten. Weiß jemand rat?
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.1, eingetragen 2018-07-05
|
Meinst Du es so?
\sourceon Matlab
t = 0;
U_mag = 0;
Hoehe = 0;
Ts = 0.1;
for i = 1 : 10
% neue Messwerte
t = [t i*Ts];
U_mag = [U_mag sin(i)];
Hoehe = [Hoehe 3*cos(i)];
[ax, h1,h2] =plotyy(t,U_mag,t,Hoehe);
set(get(ax(1),'Ylabel'),'String','Velocity U [m/s]','FontWeight','Bold')
set(get(ax(2),'Ylabel'),'String','Hoehe [m]','FontWeight','Bold')
xlabel ('Time[s]');
title('Velocity Profiles');
pause(0.5)
end
\sourceoff
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.2, vom Themenstarter, eingetragen 2018-07-06
|
Hallo, danke für deine schnelle antwort.
Aber das ist doch genau mein Code, und der funktioniert bei dir, bei mir jedoch nicht,
Hier der Auszug aus meinem Skript:
\sourceon nameDerSprache
**Windprofil-Files eingelesen**
For i=1:100
if Messwerte_alle (i) .name= “Windprofile.txt“
Messwerte =importdata (Messwerte_alle (i) .name, ‚‘‘)
**Windprofile, Höhe und Zeit ausgelesen**
U_mag= Messwerte (:,3);
Hoehe= Messwerte (:,4);
t= Messwerte (1,5);
endif
**Plotten innerhalb der Schleife**
[ax, h1,h2] =plotyy(t,U_mag,t,Hoehe);
hold (ax(1),'on')
hold (ax(2),'on')
set(get(ax(1),'Ylabel'),'String','Velocity U [m/s]','FontWeight','Bold')
set(get(ax(2),'Ylabel'),'String','Hoehe [m]','FontWeight','Bold')
xlabel ("Time[s]");
title("Velocity Profiles");
plot(ax(1), t,U_mag);
hold on
plot(ax(2), t,Hoehe);
hold on
end
\sourceoff
Wo ist der Fehler bei mir, nur weil ich ohne "laufindex" arbeite?
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.3, eingetragen 2018-07-06
|
Wie viele Einträge hat der Vektor $t$?
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.4, vom Themenstarter, eingetragen 2018-07-06
|
Einen! Liegt es also daran? Bei deinem Beispiel waren es ja i.
Wenn ich aber t(i)=Messwerte(1,5); mache dann stürzt er bei der 2. Zeit ab!
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.5, vom Themenstarter, eingetragen 2018-07-06
|
Wenn ich t(i) auch in den plotty aufruf einsetzte dann läuft er durch, hat dann auch entsprechend i Einträge, jedoch überschreibt er die werte im Diagramm auch wieder!
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.6, eingetragen 2018-07-06
|
Mir ist nicht klar was Du meinst. Im Code aus Beitrag #1 wird bei jedem Durchlauf der Schleife alles neu geplottet. Die alten Messwerte müssen dazu natürlich abgespeichert werden.
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.7, vom Themenstarter, eingetragen 2018-07-06
|
Also wenn ich nun meinen letzten Beitrag wie folgt abändere
\sourceon nameDerSprache
t (i)= Messwerte (1,5);
[ax, h1,h2] =plotyy(t(i),U_mag,t(i),Hoehe);
\sourceoff
Dann hat nun auch t i-Einträge, so wie es in deinem Beispiel der Fall ist, und dennoch wird t immer(noch) im Plot überschrieben.
Umag und Hoehe beinhalten immer nur ein Profil, welches in jedem Schleifenumlauf überschierben wird, so bei mir wie auch in deinem Beispiel.
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.8, eingetragen 2018-07-06
|
\quoteon(2018-07-06 12:29 - Markus_Sw in Beitrag No. 7)
Dann hat nun auch t i-Einträge, so wie es in deinem Beispiel der Fall ist,
\quoteoff
Wirklich?
Was wird in der Kommandozeile ausgeben, wenn Du das Semikolon weglässt?
\sourceon Matlab
t (i)= Messwerte (1,5)
\sourceoff
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.9, vom Themenstarter, eingetragen 2018-07-09
|
Meine Zeit t läuft von 20:20:1200, in der Kommandozeile steht:
t = 20
t =
20 40
t =
20 40 60
t =
20 40 60 80
t =
20 40 60 80 100
usw....
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.10, eingetragen 2018-07-09
|
Gut, dann ist $t$ ein Vektor und damit $t(i)$ ein Skalar.
Hier
\quoteon(2018-07-06 12:29 - Markus_Sw in Beitrag No. 7)
\sourceon nameDerSprache
t (i)= Messwerte (1,5);
[ax, h1,h2] =plotyy(t(i),U_mag,t(i),Hoehe);
\sourceoff
\quoteoff
versuchst Du dann den Vektor U_mag über dem Skalar $t(i)$ zu plotten.
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.11, vom Themenstarter, eingetragen 2018-07-09
|
Ja so ist es. Ich sehe ja auch das er alles richtig macht, er plottet beide y-Achsen nur leider wird der vorige t-Wert nicht im plot gespeichert (trotz hold) sondern wird immer wieder neu überschrieben...
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.12, eingetragen 2018-07-09
|
Ich wollte mit Beitrag #10 eigentlich nur deutlich machen, dass es so nicht funktionieren kann. Wie man die vorhergehenden Werte von $t$ abspeichert, hatte ich bereits in Beitrag #1 gezeigt.
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.13, vom Themenstarter, eingetragen 2018-07-09
|
MMhh,irgendwie scheine ich auf dem Schlauch zustehe. Ich sehe keinen Unterschied zwischen dein Beispiel und dem was ich habe, dein t wird genauso abgespeichert wie meines. Dann versuche ich es ganz anders, scheine hier so nicht weiterzukommen... Dennoch Danke.
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.14, eingetragen 2018-07-09
|
Siehst Du den Unterschied?
\sourceon Matlab
t = [ 1 2 3];
U = [ 4 9 6];
figure(1)
plot(t,U)
figure(2)
plot(t(2),U)
\sourceoff
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.15, vom Themenstarter, eingetragen 2018-07-09
|
o.k, Ich starte meinen letzten versuch. Ich habe mir pseudoMessdaten generiert, so dass jeder mein Problem nachvollziehen kann.
\sourceon nameDerSprache
Vektor=[1:1:10];
Hoehe=[1:10:100];
for i=1:10
ind = randperm(length(Vektor));
PseudoMessdaten = Vektor(ind)
t_neu (i)= i+1;
[ax, h1,h2] =plotyy(t_neu(i),PseudoMessdaten,t_neu(i),Hoehe);
hold (ax(1),'on')
hold (ax(2),'on')
set(get(ax(1),'Ylabel'),'String','Velocity U [m/s]','FontWeight','Bold')
set(get(ax(2),'Ylabel'),'String','Hoehe [m]','FontWeight','Bold')
xlabel ("Time[s]");
title("Velocity Profiles");
plot(ax(1), t_neu(i),PseudoMessdaten);
hold on
plot(ax(2), t_neu(i),Hoehe);
hold on
end
\sourceoff
Und nun nochmal meine Frage, wie kann ich verhindern, dass ich immer nur ein Profil sehe welches ständig überschrieben wird?
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.16, eingetragen 2018-07-09
|
Ich könnte Deinen Code jetzt wieder etwas abändern, aber dann wäre ich im wesentlichen wieder bei Beitrag #1.
Entweder verstehe ich Dich komplett falsch oder Du hast eine falsche Vorstellung von dem hold-Befehl.
Vielleicht kann ja sonst noch jemand helfen...
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2317
 | Beitrag No.17, eingetragen 2018-07-09
|
Hallo Markus!
Wenn Du zur Abwechslung mal 2 Plots verwendest (subplot(1,2,1) subplot(1,2,2)) sieht dann die Grafik in den beiden Subplots wenigstens richtig aus?
Viele Grüße
Ronald
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.18, vom Themenstarter, eingetragen 2018-07-10
|
Danke für Eure Rückmeldung.
Hallo Ronald, wenn ich Subplots verwende, bekomme ich 2 separate Plots. Das möchte ich eigentlich vermeiden.Dann kann ich auch 2 normale plot-Befehle verwenden, das bekomme ich hin, jedoch nicht mein Ziel.
Hallo Majoka ich drücke mich mal anders aus. Der folgende Code funktioniert für den normalen Plot mit nur einer y-Achse. (So möchte ich es haben, jedoch mit 2 y-Achsen)
\sourceon nameDerSprache
Vektor=[1:1:10];
Hoehe=[1:10:100];
for i=1:10
ind = randperm(length(Vektor));
PseudoMessdaten = Vektor(ind);
t_neu (i)= i+1;
plot(t_neu(i),PseudoMessdaten);
hold on
xlabel ("Time[s]");
ylabel ("Windprofil [m/s]");
title("Velocity Profiles");
\sourceoff
Wieso funktioniert das nicht mehr, wenn ich den plot Befehl durch
plotyy(t_neu(i),PseudoMessdaten, t_neu(i), Hoehe);
austausche?
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.19, eingetragen 2018-07-10
|
Vielleicht verhält sich Octave hier auch anders als Matlab. Ich sehe für Deinen Code aus Beitrag #18 nur vereinzelte Punkte.
Falls dies wirklich beabsichtigt sein sollte, könnte man es vielleicht so machen
\sourceon Matlab
clf
Vektor=[1:1:10];
Hoehe=[1:10:100];
t = [];
mem_PseudoDaten = [];
mem_HoehenDaten = [];
for i=1:10
ind = randperm(length(Vektor));
PseudoMessdaten = Vektor(ind);
t_neu (i)= i+1;
t = [t t_neu(i)];
mem_PseudoDaten = [mem_PseudoDaten PseudoMessdaten'];
mem_HoehenDaten = [mem_HoehenDaten Hoehe'];
[nx,ny] = size(mem_PseudoDaten);
if nx == ny
% bei quadratischer Matrix muss transponiert werden
mem_PseudoDaten = mem_PseudoDaten';
mem_HoehenDaten = mem_HoehenDaten';
end
figure(2)
[hAx,hLine1,hLine2] = plotyy(t, mem_PseudoDaten(:,1:i),t, mem_HoehenDaten(:,1:i));
set(hLine1,'LineStyle','o')
set(hLine2,'LineStyle','x')
xlabel ('Time[s]');
ylabel ('Windprofil [m/s]');
title('Velocity Profiles');
pause(0.1);
figure(1)
[hLine1] = plot(t_neu(i),PseudoMessdaten);
set(hLine1,'LineStyle','o')
hold on
xlabel ('Time[s]');
ylabel ('Windprofil [m/s]');
title('Velocity Profiles');
hold off
end
\sourceoff
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2317
 | Beitrag No.20, eingetragen 2018-07-10
|
Hallo Markus!
Noch mal eine Frage zur Grafik.
Soll es aussehen wie Punkte auf einer Linie (Grafik im ersten Post) oder
eher ähnlich zu folgender Grafik:
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/15578_Bouncing_Ball.jpeg
Ich hatte vor Jahren mal einige Fragen zu Matlab beantwortet.
Mit plotyy habe ich aber glaube ich nicht gearbeitet.
Mit den 2 Subplots das war eine Frage um sich an die richtige Lösung
heranzutasten.
Viele Grüße
Ronald
|
Profil
|
rlk
Senior  Dabei seit: 16.03.2007 Mitteilungen: 11602
Wohnort: Wien
 | Beitrag No.21, eingetragen 2018-07-11
|
Hallo,
Octave 4.0.0 liefert mit dem Code aus Beitrag 18 (dort fehlt noch das end ) den folgenden Plot:
https://www.matheplanet.at/matheplanet/nuke/html/uploads/b/17466_plot18.png
Wie majoka in Beitrag 10 schon geschrieben hat, verwendest Du einen Skalar für die x-Achse und einen Vektor für die y-Achse, was keiner der in der Beschreibung von plot() angegebenen Fälle ist.
Die Beschreibung von plotyy() ist weniger ausführlich, liefert aber keinen Grund, warum Deine Verwendung funktionieren sollte.
Hast Du ein Beispiel für einen Plot mit den von Dir gewünschten Windprofilen? Mir ist nämlich nicht klar, was man hier erkennen soll.
Servus,
Roland
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.22, vom Themenstarter, eingetragen 2018-07-11
|
Hallo, erstmal vielen Dank für Eure Unterstützung.
Vielleicht (nochmal) zur Verdeutlichung, ich möchte das es so aussieht:
https://matheplanet.com/matheplanet/nuke/html/uploads/b/42550_Musterbeispiel.jpg
Nur ist bei diesem Beispiel bei der x-Achse ein kudelmudel passiert, dort soll nur die Zeit t stehen.
@Roland, bei deinen gezeigten plot fehlt im Grunde nur noch die 2. Y-Achse. Darum geht es mir die ganze zeit, mit dem normalen Plot befehl bekomme ich es hin, wenn ich jetzt aber in einem Diagramm eine 2. Y-Achse (eben für die Hoehe der Windprofile) haben möchte funktioniert die sache nicht mehr.
Ich weiss auch nicht ob etwas mit meinem Octave nicht stimmt, wenn ich den Code von Majoka ausprobieren möchte, meckert Octave über
den Befehl "set(hLine1,'LineStyle','o')" mit
"error: invalid value = o."
Ich benutze octave 3.8.2.
|
Profil
|
rlk
Senior  Dabei seit: 16.03.2007 Mitteilungen: 11602
Wohnort: Wien
 | Beitrag No.23, eingetragen 2018-07-11
|
Hallo Markus_Sw,
versuche den Skalar t bzw. t_neu durch einen Vektor passender Länge zu ersetzen. Das Programm aus Beitrag 18 sieht dann so aus (ungetestet):
\sourceon Matlab
\numberson
Vektor=[1:1:10];
Hoehe=[1:10:100];
for i=1:10
ind = randperm(length(Vektor));
PseudoMessdaten = Vektor(ind);
% t_neu (i)= i+1;
vt = (i+1) * ones(1, length(PseudoMessdaten));
plot(vt, PseudoMessdaten);
hold on
end
xlabel("Time[s]");
ylabel("Windprofil [m/s]");
title("Velocity Profiles");
\sourceoff
Servus,
Roland
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.24, vom Themenstarter, eingetragen 2018-07-11
|
Hallo Ronald,
Danke für deinen Beitrag. Leider scheinen wir uns im Kreis zu drehen.
Dein Code funktioniert, genauso wie der in meinen Beitrag 18.
Ich möchte aber 2 Y-Achsen haben d.h. links das windprofil, rechts die Höhe und auf der gemeinsamen x-Achse die Zeit.
Funktioniert denn dein Code bei Dir wenn du anstelle plot den plotyy Befehl nimmst? Das war meine Frage schon in Beitrag 18.
Gruß
Markus
|
Profil
|
Markus_Sw
Aktiv  Dabei seit: 21.03.2015 Mitteilungen: 80
 | Beitrag No.25, vom Themenstarter, eingetragen 2018-07-11
|
Hallo,
es scheint wohl so zu sein das plotyy eine andere Art von Plot ist als der normale plot, so dass hier keine vektoren vs skalar geplottet werden können (obwohl der normale plot Befehl das zulässt).
Um den ganze nun ein Ende zu mache habe ich nun alles zu Matrizen umgeformt und nun gehts.
Danke dennoch für Eure Vielzahl an Hilfestellungen.
Gruß
Markus
|
Profil
|
Markus_Sw hat die Antworten auf ihre/seine Frage gesehen. Das Thema wurde von einem Senior oder Moderator abgehakt. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|