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 zwei Y-Achsen

 

Gastzugast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2009, 15:50     Titel: Plot mit zwei Y-Achsen
  Antworten mit Zitat      
Hallo,
ich habe eine Messreihe in der Form:
x y1 y2
wobei diese jeweils 100 Zahlen enthalten.
y1 und y2 sind von der Größenordnung sehr verschieden, sodass ich in einem normalen plot y2 nur als Linie erkennen kann. Gibt es eine Möglichkeit einen Plot zu erstellen, indem x auf der horizontalen Achse, y1 links vertikal und y2 rechts vertikal aufgetragen werden?
Danke


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 23.04.2009, 16:09     Titel:
  Antworten mit Zitat      
Hallo,

Code:


Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Evolution3

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2009, 19:21     Titel:
  Antworten mit Zitat      
Hallo,

kann mit jemand bitte ein Codebeispiel geben:

Ich habe 2 Varibalen z.B.
A -> Geschwindigkeit über Zeit
B -> Verbrauch über Zeit

Nun möchte ich dass ich Diagramm A und B gemeinsam in ein Diagramm übereinander liegen.
Links auf Y Achse die Gesch. und rechts auf der Y Achse der Verbrauch

Dürfte ja dann auch über plotyy gehen.

Beispiel aus der Hilfe:

Code:

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
 


Ich verstehe nur nicht, was nun mein X ist. Da mein X in dem Fall schon beides mal in der Varibalen A und B drin stecken.


Vielen Dank für eure Hilfe Smile

edit by Maddy: Bitte immer die Code-Umgebung verwenden.
 
Evolution3

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2009, 08:57     Titel:
  Antworten mit Zitat      
soooo

>> t=0:1300;
>> z1=v_cycle;
>> z2=eng_FC_cumul;
>> [haxes,hline1,hline2]=plotyy(t,z1,t,z2);
??? Error using ==> plot
Vectors must be the same lengths.

Error in ==> plotyy>fevalfun at 290
h = feval(func,x,y);

Error in ==> plotyy at 61
[h1,ax(1)] = fevalfun(fun1,ax(1),x1,y1,caxspecified);


Kann mir jemand bitte weiterhelfen, wie ich das Problem löse

Besten Dank
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 29.04.2009, 09:43     Titel:
  Antworten mit Zitat      
Du schreibst, das X bereits in deinen Variablen drinsteckt. Was meinst du damit?

Wenn dir die Skalierung über die Position im Vektor ausreicht, sollten dies deine x-werte sein:

Code:
x1=1:length(A);
x2=1:length(B)


Falls nicht, müsstest du obige Frage konkret beantworten.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Evolution3

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2009, 10:27     Titel:
  Antworten mit Zitat      
Hallo Maddy,

vielen Dank erstmal für deine Antwort

Sorry, mein Fehler. In der Variablen (Vektor) v_cycle stehen nur die Werte der Geschwindigkeit
Also:

0
1
5
10
usw.


Vielen Dank, das hat mir sehr geholfen. Es wird nun dargestellt:
Code:
>> y1=v_cycle;
>> y2=eng_FC_cumul;
>> x1=1:length(y1);
>> x2=1:length(y2);
>> [AX,H1,H2] = plotyy(x1,y1,x2,y2,'plot');
>> axes(AX(1));
>> ylabel('Geschwindigkeit');
>> axes(AX(2));
>> ylabel('Verbrauch');
>>


Habe nun nur noch das Problem, dass die X Achse nicht die richtige Zeit darstellt.
Es sollte der NEFZ Zyklus bis 1200s dargestellt werden.
Die Zeit geht aber von 0 bis 2500s

Nun muss ich nur noch herusfinden, wie ich auf den y Achsen Zwischenskalierungen bekomme. Schaff ich aber alleine hfftl. Smile

Grüße
 
Evolution3

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2009, 11:05     Titel:
  Antworten mit Zitat      
Sooo, nun passt es , FAST Very Happy

Habe nun noch 2 Fragen:
1) Im Moment sieht das Schaubild so aus, dass die linke y-Achse auch auf der rechten Y-Achse unterteilt wird. Nur ohne Beschriftung
Sieht eben unschön aus

2) Die x Achse sollte eigentlich nur von 0 bis 1190s gehen.
Ich frage mich woher das Zeitinterball von 0 bis 2500s herkommt.


Code:
y1=v_cycle;
y2=eng_FC_cumul;
x1=1:length(y1);
x2=1:length(y2);
[AX,H1,H2] = plotyy(x1,y1,x2,y2,'plot');
axes(AX(1));
ylabel('Geschwindigkeit [m/s]');
axes(AX(2));
ylabel('Kraftstoffverbrauch [kg]');
title('Kraftstoffverbrauch über NEFZ')
set(AX(1),'ylim', [0,40],'ytick',0:5:40)
set(AX(2),'ylim', [0,1],'ytick',0:0.1:1)
xlabel('Zeit [s]');
grid
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 29.04.2009, 11:17     Titel:
  Antworten mit Zitat      
zu 1)
Code:


zu 2) x1 bzw. x2 skalieren, dass was da angezeigt wird sind einfach nur die Elementnummern und die haben bekanntlich keine Einheit. Du musst also die Zeit rausfinden, die von einem Messpunkt zum nächsten vergangen ist und damit die Achse skalieren.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Evolution2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2009, 11:25     Titel:
  Antworten mit Zitat      
Hab mich mal angemeldet,. Dann kann ich auch editieren

1) Schreibe ich box on, so wird die rechte y Achse auch auf der linken Y Achse abegildet.

Allerdings passiert bei box off leider nichts.

EDIT: Passts nun. An der falschen Position hingeschrieben

2) Stimmt, macht Sinn
Gemessen wird jede Sek. Bzw. ich gebe den Zyklus in einem Textfile vor.
Zu jeder Sek eine Geschw.
Von 0 bis 1190

Probier ich gleich aus.

Die Grenzen kann ich ja auch durch
set(gca,'XLim',[0 1200]);
festlegen

Aber dann dürfte die Zeit nicht mehr mit der Geschw. übereinstimmen


EDIT:

das length gibt mir nur die Anzahl an
Hab jetzt versucht das so zu lösen:
x1=set(gca,'XLim',[0 1190]);
x2=set(gca,'XLim',[0 1190]);
??? Error using ==> set
One or more output arguments not assigned during call to "set".

mmmh schade, geht nicht
 
Evolution2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2009, 13:26     Titel:
  Antworten mit Zitat      
Letztes Mal hoffentlich zu diesem Thema. Sorry

Hab nun alles so hinbekommen, wie ichs woll.

Jedoch habe ich immer noch nicht erreicht, dass die X Achse von
o bis 1190 bzw 1200 s angezeigt wird.

Hab schon einige Sachen ausprobiert, die jedoch nicht zum Ziel geführt haben
Was muss ich anstatt diesem Code hinschreiben ?
x1=1:length(y1);

Vielen Dank im Voraus
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 29.04.2009, 13:30     Titel:
  Antworten mit Zitat      
Du musst ja 2500 Messwerte haben und die wurden in einem zeitlichen Abstand aufgenommen. Wenn du die x-Vektoren mit diesem Abstand multiplizierst, erhälst du eine richtig skalierte Zeitachse.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Evolution2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2009, 13:44     Titel:
  Antworten mit Zitat      
Da stimmt was nicht.

Letzten Endes gebe ich den Zyklus über eine Textdatei vor
Zeit Geschw
0 0
1 0
2 15
3 usw
4
.
.
.1191


Also habe ich 1192 Messpunkte. macht ja auch Sinn, da der Zyklus solange geht.

Wie der nun auf die 2500 kommt ist mir schleicherhaft.
Lasse ich die Variable v_cycle ausgeben sind allerdings auch 2500 Messwerte drin.

Ganz ganz komisch



EDIT:
Habs nun gelöst (denk ich doch Smile
x1=x1*(1192/2361);
x2=x2*(1192/2361);

Der Zylus geht ja normalerweise von 0 bis 1191
Jedoch habe ich 2361 Messwerte


Vielen Dank für deine Unterstützung
 
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.