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

Plots mit mehreren y-Achsen untereinander darstellen

 

tom162
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.05.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2023, 22:15     Titel: Plots mit mehreren y-Achsen untereinander darstellen
  Antworten mit Zitat      
Hallo zusammen,

ich versuche aktuell zwei Plots untereinander darzustellen. Da ich aber im oberen Plot mehrere y-Achsen habe, funktioniert subplot etc. nicht.

Der obere Plot setzt sich dabei aus mehreren Plots zusammen, um alle 3 y-Achsen zu ermöglichen. Gibt es hier einen Weg diese zusammen zu führen um einen weiteren Plot darunter per subplot oder anderer Funktion einzubauen?

Hier der bisherige Plan:

Code:

data1 = [4 2 3 4];
data2 = [2 4 3 1];
data3 = [6 5 2 3];
time = [1 2 3 4];
totalfigure = figure;
totalfigure.Color = [1,1,1];
totalfigure.Position = [10, 10, 900, 500];
 
%Top
hold on
tiledlayout(2, 1)
nexttile
mainAxis = axes;
yyaxis left;
plot(time, data1);
ylabel("Data1");
pause(0.1);
mainAxis.XTickMode = 'manual';
mainAxis.YTickMode = 'manual';
mainAxis.YLim = [min(mainAxis.YTick), max(mainAxis.YTick)];
mainAxis.XLimMode = 'manual';
grid(mainAxis, 'on');
ytick = mainAxis.YTick;
yyaxis right;
plot(time, data2);
ylabel("Data2");
data3Axis = axes('position', mainAxis.Position);
plot(data3Axis, time, data3);
ylabel("Data3");
pause(0.1)
data3Axis.Color = 'none';
grid(data3Axis, 'on');
data3Axis.XLim = mainAxis.XLim;
data3Axis.XTick = mainAxis.XTick;
data3Axis.YLimMode = 'manual';
yl = data3Axis.YLim;
data3Axis.YTick = linspace(yl(1), yl(2), length(ytick));
data3Axis.YTickLabel = strcat(data3Axis.YTickLabel, {'              '});
 


Vielen Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.05.2023, 09:49     Titel:
  Antworten mit Zitat      

_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.028
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 20.05.2023, 08:05     Titel:
  Antworten mit Zitat      
Hallo,

Harald hatte wahrscheinlich schon eine elegantere Lösung, nur blieb diese für mich unsichtbar. Hier mein Vorschlag - im Wesentlichen scheint es notwendig zu sein, die Tiles am Anfang zu initiieren. Denn die zusätzliche Data3-Axes funkt sonst dazwischen und dann scheint nexttile nicht mehr zu funktionieren. Ansonsten darauf achten, dass die verschiedenen Bereiche/Axes richtig angesprochen werden, damit Matlab auch immer weiß, was du möchtest. Außerdem wird dann hold on/off (das 'off' fehlte?) nicht benötigt und die Umstellung der TickModes auf 'manual' scheint auch irgendwie nicht praktikabel gewesen zu sein.

Code:
data1 = [4 2 3 4];
data2 = [2 4 3 1];
data3 = [6 5 2 3];
time = [1 2 3 4];

% Set up figure
totalfigure = figure(Color=[1,1,1], Position=[10, 10, 900, 500]);
% totalfigure.Color = [1,1,1];
% totalfigure.Position = [10, 10, 900, 500];
tiledlayout(totalfigure, 2, 1)
mainAxis = nexttile;
subAxis = nexttile;

% Top

% hold on
% mainAxis = axes;
yyaxis(mainAxis,'left');
plot(mainAxis, time, data1);
ylabel(mainAxis,"Data1");
pause(0.1);  % wofür?!
% mainAxis.XTickMode = 'manual';
% mainAxis.YTickMode = 'manual';
mainAxis.YLim = [min(mainAxis.YTick), max(mainAxis.YTick)];
% mainAxis.XLimMode = 'manual';
grid(mainAxis, 'on');
ytick = mainAxis.YTick;
yyaxis(mainAxis, 'right');
plot(mainAxis, time, data2);
ylabel(mainAxis,"Data2");
data3Axis = axes('position', mainAxis.Position);
plot(data3Axis, time, data3, 'k');
ylabel("Data3");
pause(0.1)  % wofür?!
data3Axis.Color = 'none';
% grid(data3Axis, 'on');
data3Axis.XLim = mainAxis.XLim;
data3Axis.XTick = mainAxis.XTick;
% data3Axis.YLimMode = 'manual';
yl = data3Axis.YLim;
data3Axis.YTick = linspace(yl(1), yl(2), length(ytick));
data3Axis.YTickLabel = strcat(data3Axis.YTickLabel, {'              '});

% Bottom
axes(subAxis);
plot(subAxis, time, data1+data3);
ylabel("Data1 + Data3");
grid(subAxis, 'on');


Gruß,
Steve
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
tom162
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.05.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2023, 08:53     Titel:
  Antworten mit Zitat      
Hallo zusammen,

die Antwort von Harald kann ich leider auch nicht sehen.

Danke Dir Steve für die Antwort. Der Weg über die Initiierung zu Beginn hatte mir gefehlt. Funktioniert ohne Probleme!

Vielen Dank!

Viele Grüße Tom
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.05.2023, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

sorry, das war zur Abwechslung mal wieder ein Formatierungsproblem. Die Nachricht wird dann nur sichtbar, wenn man auf "Zitat" klickt.
Aber schön, dass das Problem dank steve gelöst ist. :)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
tom162
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.05.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2023, 18:39     Titel:
  Antworten mit Zitat      
Hallo nochmal,

aus Steve's Beispiel habe ich übernommen, dass die Plots einem Achsensystem zugewiesen werden, im Beispiel der mainAxis:

Code:

ph1 = plot(mainAxis, time, data1);
ph2 ...
 


Wenn ich jetzt allerdings noch eine Legende am Ende hinzufügen möchte, erscheint ein Error im Command Window: "Error using legend. Invalid Argument" nach folgendem Code:

Code:

legend([ph1, ph2], 'Text1', 'Text2')
 

Nach ein bisschen ausprobieren habe ich herausgefunden, dass dieser Error nur dann erscheint, wenn man dem Plot ein Achsensystem zuweist - nimmt man diese Zuweisung weg, funktioniert zwar die Legende, aber die Graphen werden wieder im falschen Plot angezeigt. -> Auch hold on/off hilft hier nicht.

Gibt es hier etwas, das man für die Legende beachten muss, wenn man die Plots einem Achsensystem zugeordnet hat?

Vielen Dank für Eure Hilfe!

Viele Grüße Tom
Private Nachricht senden Benutzer-Profile anzeigen
 
tom162
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.05.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2023, 18:57     Titel:
  Antworten mit Zitat      
Nachtrag:

Genauer gesagt tritt das Problem immer dann auf, wenn man versucht mehrere Plots der rechten Y-Achse zuzuordnen. Auch mit hold on funktioniert folgendes bei mir leider nicht:

Code:

hold on;
ph1 = plot(mainAxis, time, data1);
ph2 = plot(mainAxis, time, data1);
ph3 = plot(mainAxis, time, data1);
hold off;
 

Es wird immer nur der letzte Plot, hier also ph3 angezeigt. Was mache ich hier falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.05.2023, 07:30     Titel:
  Antworten mit Zitat      
Hallo,

ein Problem hier: auch Befehle wie hold beziehen sich immer auf ein bestimmtes Koordinatensystem. Wenn du mehrere hast, dann auf das "zuletzt aktive". Meine Empfehlung daher:

Code:
hold(mainAxis, "on");
...
hold(mainAxis, "off");


Sollte das nicht weiterhelfen, bitte den kompletten momentan verwendeten Beispielcode posten.

Ich gehe im übrigen davon aus, dass du bei ph1 bis ph3 in deiner Anwendung unterschiedliche Daten verwendest. Ansonsten ist es kein Wunder, dass du nur einen Plot siehst. ;)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.