Verfasst am: 19.02.2008, 22:48
Titel: Variieren der LineColor bei Plot
Hallo Zusammen
Ich möchte gern bei einem plot, die Linienfarben anhand von einer Gruppeneinteilung variieren. Die Hauptgruppenfarbe wird über einen GUI ausgewählt, soll jedoch für jeden Datensatz variiert werden.
Hat so etwas schon jemand gemacht?
% mit Erweiterung: Kürzel r=red % weitere Möglichkeiten: b=blue, g=green, c=cyan, m=magenta, y=yellow, k=black hold on; p2=plot(x, y2, 'r');
% Setzen der Plot-Property Color unter eigener Definition der RGB-Anteile (von 0 bis 1) hold on; p3=plot(x, y3); set(p3, 'Color', [1.0, 0.8, 0.5]);
hold on; p4=plot(x, y4); set(p4, 'Color', [0.5, 0.8, 1.0]);
% oder vorher als Vektor definierte RGB-Einstellung
grau=[0.7, 0.7, 0.7];
hold on; p5=plot(x, y5); set(p5, 'Color', grau);
In einer GUI könnte der User beispielsweise über verschiedene Radio-Buttons sich für eine Farbe (oder einen Farbensatz) entscheiden.
Im folgenden Beispiel entscheidet sich der User mit Wahl des Radiobuttons 1 für die Farben farbe1, farbe2 und farbe3 für 3 seiner Datensätze:
Code:
% --- Executes on button press in radiobutton1. function radiobutton1_Callback(hObject, eventdata, handles) % hObject handle to radiobutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton1
% Definition der gewünschten Farbe nach RGB
farbe1=[0.50.40.3];
farbe2=[0.80.20.7];
farbe3=[0.10.80.8];
% Speichern der Variablen in einem struct (insbesondere bei Definition mehrerer Farben sinnvoll)
S_farbe=struct('farbe1', farbe1, 'farbe2', farbe2, 'farbe3', farbe3);
% Übergabe des Funktion-Structs in den Workspace assignin('base', 'S_farbe', S_farbe);
Vor dem Plot (der beispielsweise mit einem Push-Button ausgelöst werden kann) müssen dann die Farben aus dem Workspace geladen werden:
Code:
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Einladen des farbstructs S_farbe aus dem Workspace
S_farbe=evalin('base', 'S_farbe');
Das Problem ist jedoch, dass die Anzahl der Datensätze variiert aber immer >10 ist. Meine Idee wäre gewesen, über den GUI nur die Gruppeneinteilung und die Gruppenfarbe auszuwählen.
Die Farben für jeden einzelnen Datensatz automatisch eine variiation der Gruppenfarbe ist (Gruppe dunkelblau, Datensatz 1, hellblau, Datensatz 2 blau etc.). Eine andere idee wäre die Gruppenlinienmarker über den GUI zu wählen und die Linienfarbe und/oder style automatisch zu generieren.
Ok.
Also wenn als Gruppenfarbe z.b. blau über die GUI ausgewählt wurde, kann der Blauton folgendermaßen für die verschiedenen Datensätze variiert werden:
Code:
% Hauptfarbe
blau=[001];
% Anzahl der Datensätze k, z.B. 12
k=12;
% Variation der Farbtöne
o=1;
for i=0:k-1;
% beispeilhaft: leichte Anhebung des Grüntons, leichte Herabsetzung des Blautons mit 5% Schrittweite
farbe(o,:)=blau+[00.05*i -0.05*i];
o=o+1;
end
Die verschiedenen Farb-triplets werden so in einer (k,3)-Matrix gespeichert.
Farbtöne vor dem Plot definieren, und innerhalb des Plots darauf mit farbe(1,: ), farbe(2,: ), usw. Bezug nehmen.
z.B. in einer Plot-Schleife:
Code:
o=1;
% vom 1. bis zum k-ten Datensatz for i=1:k
% Plot des Datensatzes i mit Farbton i hold on; p(o)=plot(x(i), y(i)); set(p(o), 'Color', farbe(i,:));
o=o+1;
end
Ob nun die 5% eine geeignete Schrittweite zur Farbvariation ist, ist zu überprüfen und ggf. zu verändern.
Ebenso könnte man die 5% auch in Abhängigkeit der Anzahl der Datensätze variieren lassen.
vielleicht kannst Du was mit der Axes-Eigenschaft "ColorOrder" anfangen?
Dieser beinhaltet einen Farbvektor, der die Farben den Plots automatisch zuordnet. Den kann man auch selbst festlegen.
Mehr dazu in der Hilfe.
MfG
Zuletzt bearbeitet von outsider am 20.02.2008, 22:54, insgesamt einmal bearbeitet
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.02.2008, 22:03
Titel:
Danke jochma und outsider für die Vorschläge, ich muss erste einmal beide überprüfen.
danke nochmals
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.