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

plotyy plottet bei der 2. Achse nur den ersten Graph

 

DerLola
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 16.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2014, 13:37     Titel: plotyy plottet bei der 2. Achse nur den ersten Graph
  Antworten mit Zitat      
Hi Leute,

ich habe mir eine Schleife programmiert, in der ich BodeDiagramme plotten möchte. Die erste Achse, also der Betrag, plottet, Legende ist auch da, alles super. Bei der zweiten Achse wird jedoch komischerweise nur der erste Graph geplottet. Kann mir vielleicht jemand weiterhelfen? Hier mein Code:

Code:
for zaehlerfigImp=1:anzFigImp
%Ploteinstellungen
YACHSENTITEL='Z''''';
XACHSENTITEL='Z''';
FontSizeTitle=20;
FigureImp=figure(zaehlerfigImp);
set(FigureImp, 'Position', [50 100 800 400])
%Schleifendurchlauf, der immer die Anzahl der vorher definierten Graphen in
%eine Figure plottet
for p=1:laengeReihe; %Plotten aller gefundenen Dateien mit Dateiname als Legende
subplot(211)
plot(Datenbank(:,uebersichtzaehler+zaehlerplot+p), Datenbank(:,uebersichtzaehler+zaehlerplot+(p+1)), 'Color',Colour(p*200,:), 'LineWidth',2,'DisplayName',[Uebersicht{uebersichtzaehler+p,1} ' ' Uebersicht{uebersichtzaehler+p,2} ' ' Uebersicht{uebersichtzaehler+p,3} ' ' Uebersicht{uebersichtzaehler+p,4} ' ' Uebersicht{uebersichtzaehler+p,5}]);
grid on
legend('-DynamicLegend');
set(gca,'YDir','reverse'); % Y-Achse invertieren
ylabel(YACHSENTITEL, 'FontSize',15)
xlabel(XACHSENTITEL, 'FontSize',15)
hold on;
subplot(212)
zbetrag(:,p)=sqrt((Datenbank(:,uebersichtzaehler+zaehlerplot+p)).^2+(Datenbank(:,uebersichtzaehler+zaehlerplot+(p+1))).^2);
hilfsvarphase(:,p)=(Datenbank(:,uebersichtzaehler+zaehlerplot+(p+1)))./(Datenbank(:,uebersichtzaehler+zaehlerplot+p));
phase(:,p)=atand(hilfsvarphase(:,p));
[AX,H1,H2]=plotyy(f_bereich(:,1),zbetrag(:,p),f_bereich(:,1),phase(:,p),'plot');
grid on
set(H1,'DisplayName', [ 'Z:' Uebersicht{uebersichtzaehler+p,2} ' ' Uebersicht{uebersichtzaehler+p,3} ' ' Uebersicht{uebersichtzaehler+p,4} ' ' Uebersicht{uebersichtzaehler+p,5}])
set(H2, 'DisplayName' , 'H2 Legende')
set(get(AX(1),'Ylabel'),'String','Z')
set(get(AX(2),'Ylabel'),'String','Phase')
xlabel('Frequenz','FontSize',FontSizeTitle)
hold on;
%legend('-DynamicLegend');
zaehlerplot=zaehlerplot+1;
hold all;
end
set(AX,'XScale','log');
legend('location', 'SouthEast'); % Legende günstig platzieren
%title(['Impedanzspektren von:' ' ' Uebersicht{uebersichtzaehler+p,2} ' mit ' Uebersicht{uebersichtzaehler+p,3}] ); %Bei Bedarf Diagrammtitel
hold off;
set(gcf,'Name',['Imp: ' Uebersicht{uebersichtzaehler+p,2} '_' Uebersicht{uebersichtzaehler+p,3}]);
%Abspeichern der Figure als jpg
%print( FigureImp, '-djpeg' , ['diagramme\' 'imp_' Uebersicht{uebersichtzaehler+p,2} '_' Uebersicht{uebersichtzaehler+p,3} ]);
%print( FigureImp, '-depsc2' , ['diagramme\' 'imp_' Uebersicht{uebersichtzaehler+p,2} '_' Uebersicht{uebersichtzaehler+p,3} ]);
uebersichtzaehler= uebersichtzaehler+laengeReihe;
end


Es hakt also bei subplot212 und phase(:,p). Die schleife läuft durch, sonst wären die zbetrag ja nciht geplottet....

Würde mich sehr über Hilfe freuen.
Private Nachricht senden Benutzer-Profile anzeigen


DerLola
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 16.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2014, 08:54     Titel:
  Antworten mit Zitat      
Niemand? Ich hab jetzt noch in Erfahrung bringen können, dass es evenuell etwas mit der hold Funktion zu tun hat.

Jedoch bringt

Code:


oder
Code:


auch keine Besserung. Aus dem zweiten Datensatz für die rechte Y-Achse wird lediglich der letzte Wert dargestellt, vermutlich werden alle vorherigen überschrieben...

Ich bin am verzweifeln!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.10.2014, 00:20     Titel: Re: plotyy plottet bei der 2. Achse nur den ersten Graph
  Antworten mit Zitat      
Hallo DerLola,

Dein Code ist sehr unübersichtlich. Ich habe es mal ein klein wenig aufgehübscht, vielleicht fällt es dann leichter nachzuvollziehen, was der Code macht:
Code:
for zaehlerfigImp=1:anzFigImp
   YACHSENTITEL='Z''''';
   XACHSENTITEL='Z''';
   FontSizeTitle=20;
   FigureImp=figure(zaehlerfigImp);
   %Schleifendurchlauf, der immer die Anzahl der vorher definierten Graphen in
   %eine Figure plottet
   for p=1:laengeReihe; %Plotten aller gefundenen Dateien mit Dateiname als Legende
      subplot(211)
      plot(Datenbank(:,iOverview+iPlot+p), Datenbank(:,iOverview+iPlot+(p+1)), ...
         'Color',Colour(p*200,:), 'LineWidth',2,'DisplayName', ...
         sprintf('%s %s %s %s %s', Uebersicht{iOverview+p, 1:5}));
      grid on
      legend('-DynamicLegend');
      set(gca,'YDir','reverse'); % Y-Achse invertieren
      ylabel(YACHSENTITEL, 'FontSize',15)
      xlabel(XACHSENTITEL, 'FontSize',15)
      hold on;
      subplot(212)
      zbetrag(:,p)=sqrt((Datenbank(:,iOverview+iPlot+p)).^2+(Datenbank(:,iOverview+iPlot+(p+1))).^2);
      hilfsvarphase(:,p)=(Datenbank(:,iOverview+iPlot+(p+1)))./(Datenbank(:,iOverview+iPlot+p));
      phase(:,p)=atand(hilfsvarphase(:,p));
      [AX,H1,H2]=plotyy(f_bereich(:,1),zbetrag(:,p),f_bereich(:,1),phase(:,p),'plot');
      grid on
      set(H1, 'DisplayName', sprintf('Z:%s %s %s %s', Uebersicht{iOverview+p,2:5});
      set(H2, 'DisplayName' , 'H2 Legende')
      set(get(AX(1),'Ylabel'),'String','Z')
      set(get(AX(2),'Ylabel'),'String','Phase')
      xlabel('Frequenz','FontSize',FontSizeTitle)
      hold on;
      iPlot=iPlot+1;
      hold all;
   end
   set(AX,'XScale','log');
   legend('location', 'SouthEast'); % Legende günstig platzieren

   hold off;
   set(gcf,'Name',['Imp: ' Uebersicht{iOverview+p,2} '_' Uebersicht{iOverview+p,3}]);
   iOverview= iOverview+laengeReihe;
end

"subplot(212)" ist eine sehr veraltete Methode zum Erstellen von Subplots. Die war vor 10 Jahren schon nicht mehr gebräuchlich.
Da wir den Code nicht laufen lassen können, ist es schwer herauszufinden, welches Verghalten Du genau meinst.

Hilft Dir der Debugger weiter, wenn Du zeilenweise durch den Code gehst?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DerLola
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 16.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2014, 17:49     Titel:
  Antworten mit Zitat      
hm okay. mir wurde das letztes Jahr so in der uni noch beigebracht mit subplot.

Also ich hatte mich im englischsprachigen Raum noch umgehört, da konnte mir aber auch nicht wirklich weitergeholfen werden. (http://www.mathworks.com/matlabcentral/answers/158823-plotyy-in-for-loop-only-plots-half-of-the-data#answer_155354)

bei Interesse gibts dort eine .mat file mit der mein code dann ausführbar wird!

Im Debug Mode ist eindeutig zu erkennen, dass die zweite Y-Achse immer wieder überschrieben wird.

Ich habe es nun einfach wieder aufgeteilt auf 2 Subplots... wäre trotzdem irgendwie schön gewesen wie genau die hold Funktion bei Plotyy einzusetzen ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.10.2014, 23:19     Titel:
  Antworten mit Zitat      
Hallo DerLola,
Zitat:
mir wurde das letztes Jahr so in der uni noch beigebracht mit subplot.

Dann hat Dein Dozent wohl vor 20 Jahren Matlab gelernt.

Zitat:
bei Interesse gibts dort eine .mat file mit der mein code dann ausführbar wird!

Ich kann dort kein MAT-File finden.

Du kannst PLOTYY vor die Schleife ziehen und dann in beiden dadurch erstellten AXES-Objekten die eigenschaft 'NextPlot' auf 'add' setzen.
Innerhalb der Schleife reichen dann einfache PLOT-Befehle, bei denen jeweils auch die Eigentschaft 'Parent' auf das jeweiligen AXES-Handle angegeben wird.

Eine Antwort auf Fragen im Forum ist wahrscheinlicher, wenn Du so wenige und so klaren Code wir möglich postest. Je mehr Code-Zeilen zu finden siond, die mit dem Problem nichts zu tun haben, desto länger benötigt man um überhaupt zu verstehen, auf welche Code-Zeilen sich Deine Frage bezieht. Und wenn ein Leser mehr als 60 Sekunden zum Verstehen der Frage benötigt, sinkt die Motivation zu antworten deutlich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DerLolaGast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2014, 10:58     Titel:
  Antworten mit Zitat      
Mir ist bewusst, dass der Code umfangreich ist. Aber ich dachte er sollte auch nachvollziehbar sein.

Das .mat File ist in meinem Post doch angehängt. Hier der Direktlink:
http://www.mathworks.com/matlabcent....._files/19515/Testdata.mat
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2014, 00:50     Titel:
  Antworten mit Zitat      
Hallo DerLolaGast,
Zitat:
Mir ist bewusst, dass der Code umfangreich ist. Aber ich dachte er sollte auch nachvollziehbar sein.

Wenn in Foren andere Leute freiwillig bereit sind Zeit in die Lösung der Probleme anderer zu investieren, ist es wirklich hilfreich, so wenig von ihrer Zeit zu beanspruchen wie möglich.
Die fehlende Einrückung des Codes, die auskommentierten Code-Zeilen, die unübesichtlich langen Variablennamen und die Menge an Code, der mit dem Problem nichts zu tun hat, rauben Zeit.

Ein Daten-File in einem anderen Forum in einem Kommentar zu einer Antwort zu posten ist nicht hilfreich. Bitte poste die Daten hier in diesem Forum, wenn Du sie von Lesern hier beantwortet haben möchtest.

Ich hatte einen Vorschlag gemacht. Hilft Dir das bereits oder hast Du weitere Fragen dazu?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DerLola
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 16.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2014, 15:29     Titel:
  Antworten mit Zitat      
Dein Vorschlag klingt gut, ich habe es allerdings nicht ausprobiert, da ich nun mit subplot arbeite und das funktioniert super und meine Graphen sind übersichtlicher.

Danke trotzdem!
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.11.2014, 01:43     Titel: Re: plotyy plottet bei der 2. Achse nur den ersten Graph
  Antworten mit Zitat      
Hallo Jan,

Jan S hat Folgendes geschrieben:
"subplot(212)" ist eine sehr veraltete Methode zum Erstellen von Subplots. Die war vor 10 Jahren schon nicht mehr gebräuchlich.

Aus Interesse: Was sollte man statt subplot nutzen?

Hab probeweise mal in ein paar Matlab-Bücher von mir geschaut. Bspw. in 'Programmieren mit Matlab' (2012), 'Ingenieurmathematik kompakt – Problemlösungen mit MATLAB' (2010) und 'MATLAB und Simulink in der Ingenieurpraxis' (2012) wird subplot behandelt. Im Matlab-Einsteigerkurs an meiner Uni wurde 2011 auch noch subplot vorgestellt. Shocked

Edit: Oder geht es bloß um den Aufruf der Funktion mittels Übergabeparameter der Art '212'?

Grüße,
Seban
_________________

Richtig fragen
Debugging
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 - 2024 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.