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

Zweite y-Achse bei Plots in einer Schleife

 

Verena
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.12
Wohnort: Wien
Version: 7.0.4.365 (R14) Service Pack 2
     Beitrag Verfasst am: 10.07.2012, 08:50     Titel: Zweite y-Achse bei Plots in einer Schleife
  Antworten mit Zitat      
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',[0 0 1200 700]);
hold on;
txt_legend='';
for i = 1:(length(auswahl))
    p_i=plot(rawdata(:,1),rawdata(:,auswahl(i)));
    switch wahl(i)
        case 1
            col=schwarz;
        case 2
            col=braun;
        case 3
            col=grau;
        case 4
            col=dgruen;
        case 5
            col=hgruen;
        case 6
            col=dblau;
        case 7
            col=hblau;
        case 8
            col=dvio;
        case 9
            col=hvio;    
        case 10
            col=rot;
        case 11
            col=orange;
        otherwise
            col=schwarz;    
    end
    set(p_i,'Color',col,'LineWidth',1.5)
    txt_legend=[txt_legend colheaders{auswahl(i)-1} ':'];
end

txt_legend;
real_legend=textscan(txt_legend,'%s','delimiter',':');
titel=input('Bitte Diagrammtitel eingeben: ','s');
besch=title(titel);
set(besch, 'FontSize',12, 'FontWeight','bold');
xlabel('Zeit [*10ms]')
ylabel('Sensordaten')
leg=legend(real_legend{:});
set(leg, 'FontSize',8);
set(legend,'Location','NorthEastOutside')
grid on
%grid(gca,'minor')
hold off;
%--------------------------------------------------------------------------
 


Hoffentlich konnte ich das Problem halbwegs schildern.
Schon mal DANKE für jede Art von brauchbarer Hilfe Smile
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: 10.07.2012, 10:46     Titel: Re: Zweite y-Achse bei Plots in einer Schleife
  Antworten mit Zitat      
Hallo Verena,

Ich zumindest habe die Frage noch nicht verstanden. Was genau funktioniert denn mit PLOTYY nicht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.12
Wohnort: Wien
Version: 7.0.4.365 (R14) Service Pack 2
     Beitrag Verfasst am: 10.07.2012, 11:02     Titel:
  Antworten mit Zitat      
OK, hab ich fast befürchtet...

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Verena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.12
Wohnort: Wien
Version: 7.0.4.365 (R14) Service Pack 2
     Beitrag Verfasst am: 10.07.2012, 15:23     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Verena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.12
Wohnort: Wien
Version: 7.0.4.365 (R14) Service Pack 2
     Beitrag Verfasst am: 11.07.2012, 16:56     Titel:
  Antworten mit Zitat      
Ich habe nun einen workaround gefunden.

Hier die Kurzfassung...

-) plotyy außerhalb der Schleife
-) Handles speichern
-) In der Schleife über die Handles zusätzliche Daten plotten
-) Ca. so: line('parent',AX(1),'xdata',...)

Diese Seite hat mir geholfen:
http://stackoverflow.com/questions/.....5/choosing-axis-in-plotyy
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 12.07.2012, 14:05     Titel: Hast du ein Beispiel?
  Antworten mit Zitat      
Habe gerade genau das gleiche Problem. Würde mir sehr helfen, wenn du eine Art Kurzbeispiel angeben könntest.
Sagen wir, die Eingangsdaten lauten:

Code:
x=logspace(-2,2);
y1(1,:)=x.^2;
y1(2,:)=2^x;
y2(1,:)=x.^(1/2);
y2(2,:)=(1/2).^x;

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:

Code:
plotyy(x,y1(1,:),x,y1(2,:),'loglog')

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 12.07.2012, 14:36     Titel:
  Antworten mit Zitat      
Ok, hab's glaub ich herausgefunden. Die Lösung lautet:

Code:
x=logspace(-2,2);
y1(1,:)=x.^2;
y1(2,:)=2.^x;
y2(1,:)=x.^(1/2);
y2(2,:)=(1/2).^x;

[ha,h1,h2]=plotyy(x,y1(1,:),x,y1(2,:),'loglog');

hold(ha(1), 'on')
loglog(ha(1),x,y2(1,:),'-o')
hold(ha(2), 'on')
loglog(ha(2),x,y2(2,:),'-d')
Private Nachricht senden Benutzer-Profile anzeigen
 
Verena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.12
Wohnort: Wien
Version: 7.0.4.365 (R14) Service Pack 2
     Beitrag Verfasst am: 12.07.2012, 14:50     Titel:
  Antworten mit Zitat      
Ja, genau!
Man muss einfach die Handles speichern, dann kann man einiges anstellen 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 - 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.