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 mit 4 Graphen, überlappende Achsenskalierung

 

Typ aus dem Labor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2013, 14:54     Titel: plotyy mit 4 Graphen, überlappende Achsenskalierung
  Antworten mit Zitat      
Hallo,

ich hab ein kleines Problem mit den Befehl plotyy und leider hab ich in diesen Forum noch keine Lösung dafür gefunden, obwohl andere Aspekte durchaus ausführlich diskutiert wurden.

Der Teilcode des entsprechenden Callbacks aus ein GUI das ich für eine Auswertung meiner Diplomarbeit geschrieben habe, lautet:

Code:
figure('name','ExcelAuswertung')

if vek == [0 1]
    [AX,H1,H2]=plotyy(x_Wert,y_Wert,x2_Wert,y2_Wert,'plot');
    set(get(AX(1),'XLabel'),'interpreter','none');
    set(get(AX(1),'XLabel'),'String',x_string);
    set(get(AX(1),'YLabel'),'interpreter','none');
    set(get(AX(1),'Ylabel'),'String',y_string);
    set(get(AX(2),'YLabel'),'interpreter','none');
    set(get(AX(2),'Ylabel'),'String',y2_string);
    set(H1,'Linestyle','+');
    set(H2,'Linestyle','d');
    if isnan(y2_P(1))==0
        hold on
        [~,H1,H2]=plotyy(AX,x_Wert,y1_PWert,x2_Wert,y2_PWert,'plot');
        set(H1,'Linestyle','--');
        set(H2,'Linestyle','-.');
    end
else
    plot(x_Wert,y_Wert,'Linestyle','+')
    xlabel(x_string,'interpreter','none')
    ylabel(y_string,'interpreter','none')
    if isnan(y1_P(1))==0
        hold on
        plot(x_Wert,y1_PWert,'Linestyle','--')
    end
end


x_string und y_string ... sind einfache Zeichenketten.
x_Wert und y_Wert bzw. x2_Wert und y2_Wert sind einfache Vektoren mit 4 bzw. 5 Zahlen für die jeweilige linke und rechte Achse.

*_PWert ... sind erzeugte Werte mit Hilfe des "polyfit" und "polyval" Befehls aus den jeweiligen x_Wert und y_Wert. Entsprechen also letztendlich auch einfachen Vektoren.

Ich kann leider nicht den kompletten Code posten, da dies zu viel wäre, es gibt eine Menge Unterfunktionen, die ich noch benutze und ein Datensatz bringt euch ohne den kompletten Code nichts. Aber ich denk dies ist auch nicht nötig.

Problem ist folgendes: wenn man den Code, so wie er jetzt ist anwendet, kommt ein Plot wie dieser, den ich hochgeladen habe. Auf der rechten y-Achse sieht man das die Skalierungen nicht passen bzw. zwei verschiedene Skalierungen übereinander gelegt werden. Ich hab schon einiges ausprobiert um diesen Fehler zu beheben und zu vereinheitlichen, aber ich finde keine Lösung. Hat irgendwer eine Idee ?

Danke schon mal,
der Typ aus dem Labor

Bsp.jpg
 Beschreibung:

Download
 Dateiname:  Bsp.jpg
 Dateigröße:  18.59 KB
 Heruntergeladen:  578 mal


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.03.2013, 01:25     Titel: Re: plotyy mit 4 Graphen, überlappende Achsenskalierung
  Antworten mit Zitat      
Hallo Typ aus dem Labor,

Eine generelle Methode um solche Probleme zu lösen ist der Debugger: Setze einen Breakpoint in den Code und lasse Matlab dann Zeile für Zeile bearbeiten, bis Du heraus findest, welche Zeile das Problem verursacht.

Es sieht so aus, als würdest Du 2 Diagramme übereinander zeichnen und es finden sich auch 2 PLOTYY Befehle im Code. Dann wäre es nicht verwunderlich, wenn die Ticks durcheinander kommen.

Weitere Bemerkungen:
"if vek == [0 1]" ist valide Syntax, aber trotzdem eine Fehlerquelle. Ein Vergleich zwischen Vektopren gibt einen Vektor zurück, woraufhin IF implizit ein ALL() einfügt. Klarer wäre also: "if isequal(vek, [0,1])" oder "if all(vek == [0, 1])".

Übersichtlicher und effizienter:
[cope]set(get(AX(1),'XLabel'),'interpreter','none', 'String',x_string);
set(get(AX(1),'YLabel'),'interpreter','none','String',y_string);
set(get(AX(2),'YLabel'),'interpreter','none','String',y2_string);
[/code]

Gruß, Jan
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 - 2025 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.