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

Plot mit 2 Y-Achsen und mehreren Graphen

 

Mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2012, 13:53     Titel: Plot mit 2 Y-Achsen und mehreren Graphen
  Antworten mit Zitat      
Hallo,

ich habe ein Problem bei der Darstellung mehrerer Graphen mit unterschiedlichen Y-Achsen. Leider funktioniert bei mir die Formatierung nicht richtig. Ich habe folgendes Programm geschrieben:

Code:
x = [-10:0.01:10];
y1 = 10*sin(x);
y2= 100*x.*y1;
y3=cos(x);
y4=3*sin(x);




hold on;
[AXDI,H1DI,H2DI]=plotyy(x,y1,x,y2);
[AXDO,H1DO,H2DO]=plotyy(x,y3,x,y4);

set(H1DI,'Color','r');
set(H2DI,'Color','b');
set(H1DO,'Color','g');
set(H2DO,'Color','m');

legend(gca,'y1','y2','y3','y4');


Leider wird meine Legene nicht richtig angezeigt (die Farben stimmen nicht) und die Achsen scheinen sich irgendwie zu überlagern. Weiß jemand, wie ich die Graphen vernünftig darstellen kann?


Mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 08:25     Titel:
  Antworten mit Zitat      
Hmmm... Ich hätte eigentlich gedacht, dass das schon öfters jemand gemacht hat. Ist ja eigentlich ein Standard Fall, der öfters vorkommt. Verstehe nicht, warum das in Matlab so problamtaisch ist. Hat denn wirklich keiner eine Lösung?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.06.2012, 13:21     Titel:
  Antworten mit Zitat      
Hallo Mathi,

Es ist kaum möglich eine Lösung vorzuschlagen, wenn das Problem nur klar beschrieben ist.
Du hast geschrieben, dass die "Legende nicht richtig angezeigt wird", "die Achsen sich irgendwie zu überlappen scheinen" und dass "das in Matlab so problematisch ist". Und als Ziel hast Du angegeben, dass "die Graphen vernünftig dargestellt" werden sollen.
Was genau siehst Du und wie genau möchtest Du es darstellen?

In Deinem Code zeichnest Du 4 AXES übereinander, also je zwei pro PLOTYY. Dann bekommst Du natürlich rechts und links jeweils zwei Skalen angezeigt, während die beiden vorderen Diagramme die hinteren verdecken.
Möchtest Du 4 Y-Skalen bekommen?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 15:04     Titel:
  Antworten mit Zitat      
Hallo Jan,

nein ich möchte eigentlich, dass es genau so funktioniert, wie in der normalen Plot funktion, wenn hold on aktiviert ist. Das heißt ich würde am liebsten für alle Graphen eine x-Achse und für einige Graphen eine Y1-Achse und für die anderen eine Y2-Achse haben. Ich möchte keine überlappenden Achsen haben.

In meiner Legende werden nur 3 von 4 Graphen angezeigt. Liegt wahrscheinlich auch daran, dass der zweite Plot den ersten überlappt. Falls du es dir nicht genau vorstellen kannst habe ich mal ein Bild angehangen, in dem zu erkennen ist wie mein Graph aussieht.

Bild.png
 Beschreibung:

Download
 Dateiname:  Bild.png
 Dateigröße:  68.56 KB
 Heruntergeladen:  1334 mal
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.06.2012, 14:00     Titel:
  Antworten mit Zitat      
Hallo Mathi,

Dann sollte ein einziger PLOTYY-Befehl ausreichen, da als Argumente auch Matrizen möglich sind.
Code:
[Ax, H1, H2] = plotyy(1:100, rand(2, 100), 1:100, rand(2, 100) + 2);

Für die Legende kann man dann die Handles in H1 und H2 benutzen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2012, 17:38     Titel:
  Antworten mit Zitat      
Super Jan, vielen Dank! So funktioniert es. Der Vollständigkeit halber hier nochmal der ganze Code:

Code:
x = [-10:0.01:10];
y1 = 10*sin(x);
y2= 100*x.*y1;
y3=cos(x);
y4=3*sin(x);


[Ax, H1, H2] = plotyy(x,[y1;y2],x, [y3;y4]);
set(H1(1),'Color','r');
set(H1(2),'Color','b');
set(H2(1),'Color','g');
set(H2(2),'Color','m');
legend([H1;H2],'y1','y2','y3','y4');
 
equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 31.05.2017, 16:18     Titel:
  Antworten mit Zitat      
Hallo zusammen,

hab mal nochmal eine frage zu dem Thema Very Happy

Ich möchte 3 Kurven auf die Skalierung der Y1 Achse plotten und 1 Kurve auf die Skalierung der Y2 Achse

Folgend mein Code:
a ist meine Skalierung der X-Achse

Code:
figure(1)
hold on
[Ax, H1, H2]= plotyy(a,[b_d;rmin_d;rmax_d],a,r_d)
   set(H1(1),'color','b');
   set(H1(2),'color','r');
   set(H1(3),'color','g');
   set(H2(1),'color','m');
   title('Messreihe')  
   ylabel('Durchmesser [mm]')    
   legend('Mittelwert','Minimal-/Maximalwert','Range',4)


Folgende Fehlermeldung tritt auf:
Code:
error: __plt2vv__: vector lengths must match


Die Dimensionen der Werte sind:

b_d = 669x1
rmin_d = 669x1
rmax_d = 669x1
r_d = 669x1
a = 669x1

habe leider keine Ahnung an was das liegt -.-
_________________

Grüße Equi Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 01.06.2017, 10:49     Titel:
  Antworten mit Zitat      
Es Funktioniert wenn ich aus der Dimension 669x1 --> 1x669 mache mittel transpose.

Erledigt Very Happy
_________________

Grüße Equi Smile
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.