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?
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:
% 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
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....
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:
% 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
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.