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

mehrfarbiger Linienplot?

 

alpha1408
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 13.02.2014, 14:10     Titel: mehrfarbiger Linienplot?
  Antworten mit Zitat      
Hallo Zusammen,
ich habe ein Problem und bin mir gar nicht mal sicher, ob MATLAB eine Lösung dafür parat hat.

Ich habe einen Vektor, der eine Leistung enthält, die sich wiederum aus mehreren Quellen zusammensetzt (Hybrid-System). Ich möchte gern die Leistung über der Zeit darstellen, was noch kein Problem darstellt.

Allerdings möchte ich, dass der Linienplot (Graph) an jeder Stelle eine bestimmte Farbe hat, je nachdem wie sich die Leistung an dieser Stelle zusammensetzt. Habe mit einer if-Bedingung die Zustände zu jedem Zeitpunkt bereits herausgelesen und Werte zugeordnet.

Bspw: Zustand A=1
Zustand B=2
......

Ich habe also einen Vektor in denen lediglich die Ziffern 1-6 stehen. Steht an der aktuellen Stelle eine 1, soll der Linienplot bspw. blau an dieser Stelle sein, steht eine 2, soll er grün sein usw.

Mein Ansatz war bisher folgender: (BZST=Zustand, xx=Leistung)
Code:

hold on
plot(t(BZST==1),xx(BZST==1),'r')
plot(t(BZST==2),xx(BZST==2),'b')
plot(t(BZST==3),xx(BZST==3),'g')
plot(t(BZST==4),xx(BZST==4),'c')
plot(t(BZST==5),xx(BZST==5),'m')
plot(t(BZST==6),xx(BZST==6),'k')
hold off
 


So werden allerdings 6 versch. Linienplots über die gesamte Länge erzeugt und zwischen den eigentlichen Punkten interpoliert.

Jemand eine Idee?

Danke und VG

PS: Alternativ könnte ich mir auch einen Balken unterhalb des Diagramms vorstellen, der die Farbe wechselt, wenn der Betriebszustand verändert wird. Ist sowas möglich?
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 13.02.2014, 15:04     Titel:
  Antworten mit Zitat      
Hallo,

die Idee ist hier *nicht* für jeden Zustand eine Linie zu machen, sondern für jeden Zustandswechsel. Du müsstest dann so viele verschiedene Linien plotten, wie du Zustandswechsel hast. Dafür suchst du dir die Indices raus, an denen der Zustand wechselt und plottest dann für die Indices zwischen den Zustandswechseln Linien mit der gewünschten Farbe. Hier ein Beispiel dazu:
Code:
t = linspace(0,4*pi,200);
c = cos(t)+0.2;

% 2 Zustände (2 oder 1) cos(t) > 0 oder eben nicht
% mit 2 zugehörigen Farben. rot für 2 und grün für 1
zustand = (c > 0)+1;
farben = [1,0,0
          0,1,0];
     
% hier wechselt der Zustand
wechsel = find([1,diff(zustand)]~=0);

figure
% abschnittsweise für jeden zustand plotten.
for i = 1:length(wechsel)-1
    idx = wechsel(i):wechsel(i+1);
    plot(t(idx),c(idx),'color',farben(zustand(wechsel(i)),:))
    hold on
end


Viele Grüße,
Nras
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 13.02.2014, 15:18     Titel:
  Antworten mit Zitat      
Danke Nras, dein Beispiel ist so, wie ich es haben möchte. Nur steige ich noch nicht ganz durch die Programmierung durch.

Ich habe 6 mögliche Zustände und die Wechsel laufen nach keinem Muster ab, es kann von 1 auf 2 oder von 1 auf 6 gewechselt werden, ebenso vom 6 auf 4 usw....

Wie programmiere ich diese Bedingung?
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 13.02.2014, 15:26     Titel:
  Antworten mit Zitat      
Hallo,

von welchem der Zustände auf welchen gespruchen wird, ist dabei egal. Hauptsache der Zustand ändert sich, das heißt die differenz zweier aufeinanderfolgender Zustände ist ungleich 0. Man kann auch leicht einen dritten Zustand hinzufügen:
Code:
t = linspace(0,4*pi,200);
c = cos(t)+0.2;

% 2 Zustände (2 oder 1) cos(t) > 0 oder eben nicht
% mit 2 zugehörigen Farben. rot für 2 und grün für 1
zustand1 = (c > 0)*1;
zustand2 = (c > 1)*2;
zustand = max([zustand1;zustand2]) + 1;
farben = [1,0,0
          0,1,0
          0,0,1];
     
% hier wechselt der Zustand
wechsel = find([1,diff(zustand)]~=0);

figure
% abschnittsweise für jeden zustand plotten.
for i = 1:length(wechsel)-1
    idx = wechsel(i):wechsel(i+1);
    plot(t(idx),c(idx),'color',farben(zustand(wechsel(i)),:))
    hold on
end
 


Der Plot-part in der Schleife bleibt dabei genau so.
Viele Grüße,
Nras
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.