Verfasst am: 10.07.2012, 08:50
Titel: Zweite y-Achse bei Plots in einer Schleife
Hallo MatLab Experten!
Ich habe ein Problem beim Plotten einer zweiten y-Achse, bei dem die Plots derzeit in einer Schleife erzeugt werden. Im Moment kann ich per Benutzereingabe steuern, welche Spalten einer Matrix geplottet werden.
Nun möchte ich aber, dass die letzten beiden Spalten IMMER als zweite y-Achse geplottet werden. Im Moment gibt es nur eine y-Achse. Eine zweite mit einer eigenen Skalierung für die letzten beiden Spalten wäre aber notwendig.
Ich kenn zwar den plotyy Befehl, allerdings funktioniert das in meiner aktuellen Zusammensetzung nicht wirklich. Zu mindestens hab ich noch keinen brauchbaren Weg gefunden.
Code:
%Ein paar Dinge hab ich weg gelassen. Das wichtigste hier:
%In rawdata sind mehrere Spalten+Spaltenüberschriften mit Messdaten. Die erste Spalte enthält die Zeitinformationen und bildet somit immer die x Achse.
%Die ganzen Variablen schwarz, braun, usw sind nur Farbzuweisungen -> unwichtig fürs erste
eingabe=input('Nummern der zu plottenden Spalten eingeben (Beispiel: 2,9,10): ','s');
a=textscan(eingabe,'%d','delimiter',',');
auswahl=a{:};
jj=(length(auswahl));
%Nun kommt der Code bei dem es was zu verändern gibt
%In einer Schleife plotte ich nun alle zuvor ausgewählte Spalten. Die Farbe der Kennlinie wurden zuvor auch zugewiesen hab ich mal weg gelassen.
%---------------------------- Plot -----------------------------------
%refresh figure(1)
hFig=figure(1);
set(hFig,'PaperPositionMode','Auto','Position',[001200700]);
hold on;
txt_legend='';
for i = 1:(length(auswahl))
p_i=plot(rawdata(:,1),rawdata(:,auswahl(i)));
switch wahl(i) case1
col=schwarz;
case2
col=braun;
case3
col=grau;
case4
col=dgruen;
case5
col=hgruen;
case6
col=dblau;
case7
col=hblau;
case8
col=dvio;
case9
col=hvio;
case10
col=rot;
case11
col=orange;
otherwise
col=schwarz;
end set(p_i,'Color',col,'LineWidth',1.5)
txt_legend=[txt_legend colheaders{auswahl(i)-1} ':'];
end
Sorry, ich versuch noch mal mein Problem zu schildern:
Im Moment kann ich per Benutzereingabe steuern, welche Spalten der Matrix geplottet werden sollen. Danach werden die Spalten in einer Schleife der Reihe nach geplottet .soweit, so gut.
Nun will ich aber, dass die letzten beiden Spalten, die der Benutzer auswählt, in einer eigenen y-Achse gedruckt werden. Ich hab von dem plotyy Befehl gelesen, kann ihn aber scheinbar nicht in meiner Schleife verpacken.
Ich beschreibe das Problem mal ein wenig anders
Ich will 6 Spalten an Messdaten plotten. Alle haben die selbe x-Achse (Zeit). 4 Spalten sollen auf die linke y-Achse und 2 sollen auf die rechte y-Achse.
Code:
hold on
[ax1, h1, h2] = plotyy(zeit,spalte1,zeit,spalte6);
[ax2, h3, h4] = plotyy(zeit,spalte2,zeit,spalte5);
pl_3 = plot(zeit, spalte3);
pl_4 = plot(zeit, spalte4);
hold off;
Dadurch, dass nun alles quasi übereinander liegt, müsste ich bei einer Änderung der Achsenskalierung immer mehrere Handles ändern. Das ist total mühsam aber notwendig, weil sich sonst die Skalierungen überlappen.
Hat jemand eine bessere Idee, wie ich den Plott angehen könnte?
-) plotyy außerhalb der Schleife
-) Handles speichern
-) In der Schleife über die Handles zusätzliche Daten plotten
-) Ca. so: line('parent',AX(1),'xdata',...)
Ich weiß, die Zahlen sind ziemlich extrem, aber in einem loglog-plot sind sie dennoch problemlos darstellbar. Ich kann die Daten jetzt schön darstellen mit:
Wie kann ich jetzt allerdings beide y-Daten in einem Diagramm darstellen, unterschiedliche Markierungen verwenden, die Farben ändern, etc.
Ich schätze, die Lösung funktioniert sehr ähnlich wie die, die du gefunden hast.
Ja, genau!
Man muss einfach die Handles speichern, dann kann man einiges anstellen
Einstellungen und Berechtigungen
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
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.