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

Wie stellt man einen Plot in mehreren Farben dar?

 

chacah
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2008, 15:13     Titel: Wie stellt man einen Plot in mehreren Farben dar?
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem:

ich möchte die elektrische Leistung eines Autos über der Zeit plotten. Das Auto kann aus einer Batterie und aus einer Brennstoffzelle und aus beiden Aggregaten gleichzeitig fahren. Zudem wird bei negativer Leistung diese in die Batterie zurückgespeist. Es gibt für diesen Wagen also vier verschiedene Zustände. Ich möchte, dass der plot für jeden Zustand eine andere Farbe aufweist, also insgesamt vierfarbig ist. Für die verschiedenen Zustände gibt es einen Vektor, der folgendermaßen aufgebaut ist:

Rekuperation: Wert des Vektors gleich -5
Batteriefahren: Wert des Vektors gleich 0
Brennstoffzelle fahren: Wert des Vektors gleich 5
beide gleichzeitig: Wert des Vektors gleich 10

Der Vektor ist also genauso lang wie mein Zeitenvektor.

Um es kurz zu machen: Ich möchte, dass mein Plot abhängig von Bedingungen verschiedene Farben aufweist. Bspw. soll beim Übergang von negativer Leistung (also Rekuperieren) zu positiver Leistung (also langsame Batteriefahrt) die Farbe wechseln.

Vielen Dank für Eure Hilfe

Tobias
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 18.04.2008, 15:49     Titel:
  Antworten mit Zitat      
Hallo tobias,

meinst Du so?

Code:
figure;hold on;
plot(Zeit(Vektor==-5),Leistung(Vektor==-5),'.r');
plot(Zeit(Vektor==0),Leistung(Vektor==0),'.b');
plot(Zeit(Vektor==5),Leistung(Vektor==5),'.g');
plot(Zeit(Vektor==10),Leistung(Vektor==10),'.k');



Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chacah
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2008, 10:54     Titel:
  Antworten mit Zitat      
Hallo Bijik,

eine ähnliche Lösung habe ich auch schon gefunden, Deine ist allerdings bedeutend eleganter.

Code:
for i= 1:length(tout)/1
    Pelsollneu(i)=Pelsoll(1*i-0);
    toutkurz(i)=tout(1*i-0);
    zustandneu(i)=zustand(1*i-0);

% Frage Zustände ab und schreibe bei Vorhandensein des Zustandes einen Wert
% in einen neuen Zeit und auch Leistungsvektor.  
if zustandneu(i)==-5;
    Pelsollrek(i)=Pelsollneu(i);
    t1(i)=toutkurz(i);
    %set(gca,'color','b');
elseif zustandneu(i)==0;
    Pelsollbat(i)=Pelsollneu(i);
    t2(i)=toutkurz(i);
    %set(gca,'color','g');
elseif zustandneu(i)==5;
    Pelsollbrenn(i)=Pelsollneu(i);
    t3(i)=toutkurz(i);
    %set(gca,'color','r');
elseif zustandneu(i)==10;
    Pelsollboost(i)=Pelsollneu(i);
    t4(i)=toutkurz(i);
    %set(gca,'color','c');
end
end

whos Pelsollneu
whos toutkurz
whos zustandneu

% Plotte Vektoren. Dies geht nur punktweise, weil sonst über Grenzen hinweg
% interpoliert wird, über die ich nicht hinweg interpolieren möchte.

plot(t1,Pelsollrek,'b.',t2,Pelsollbat,'g.',t3,Pelsollbrenn,'r.',t4,Pelsollboost,'c.')
legend('Rekuperieren','Batterie','Brennstoffzelle','Boosten','Location','SouthOutside')


Leider habe ich so eine figure, in der ich mir nur einzelne Punkte anschauen kann. Ich möchte aber, dass mir die Leistungen stetig hintereinander weg in unterschiedlichen Farben gezeichnet werden. Wenn ich jetzt einfach den Punkt in den Plot Befehlen wegnehme, passiert Folgendes:

Nehmen wir an, das Auto rekuperiert von 90 bis 120 Sekunden und von 150 bis 160 s. Deine und auch meine Lösung interpolieren nun zwischen 120 und 150 s, obwohl während dieser Zeit gar nicht rekuperiert wird. Ich versuche derzeit einen Ansatz mit einer while Schleife:

Code:
for i= 2:length(tout)
   
    while zustand(i)-zustand(i-1)==0
       
        toutneu=[toutneu;tout(i-1)];
        Pelneu=[Pelneu;Pelsoll(i-1)];
        if i<length(tout)
            i=i+1;
        else
            break
        end
    end
   




figure(3)
%hold on
if zustand(i-1)==-5;
    plot(toutneu,Pelneu,'b')
elseif zustand(i-1)==0;
    plot(toutneu,Pelneu,'g')
elseif zustand(i-1)==5;
    plot(toutneu,Pelneu,'r')
elseif zustand(i-1)==10
    plot(toutneu,Pelneu,'c')
end

   

%goto(a)
end


Diese while Schleife soll so lange durchlaufen werden, wie sich der Zustand nicht ändert. Dann frage ich den Zustand ab und plotte ihn. Die vorstehende for-Schleife macht mir allerdings einen Strich durch die Rechnung, weil sie halt so oft durchläuft, wie ich es ihr vorschreibe, nämlich length(tout). Ich weiß allerdings nicht, wie ich sonst ein i für die while-Schleife produzieren soll, um praktisch die Ableitung des Zustands-Vektors zu bilden. Freue mich über jede Hilfe.

Herzliche Grüße

Tobias
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.