Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » plotyy in einer Schleife
Autor
Ausbildung J plotyy in einer Schleife
Markus_Sw
Aktiv Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2306
  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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2306
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11598
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11598
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: im letzten Quartal
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.

Wechsel in ein anderes Forum:
 Suchen    
 
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]