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

Variieren der LineColor bei Plot

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2008, 23:48     Titel: Variieren der LineColor bei Plot
  Antworten mit Zitat      
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?


jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 20.02.2008, 11:05     Titel:
  Antworten mit Zitat      
Servus,

sofern ich deine Frage richtig verstanden habe: in Matlab kann man die Linienfarben auf folgenden Arten definieren:

Code:

% Beispieldatensatz
x=[1:10];
y1=[1 2 3 2.4 6 2 9 2 4.2 2.3];
y2=[3 7 8 3.4 8 7 4 1 6.2 5.4];
y3=[5 2.3 9 2.9 4 2 2.5 9 4.2 3.2];
y4=[2.4 7 5 1.4 7 4 3 3.5 3.2 7];
y5=[5 6 8.5 6.4 6 8 9.2 7 4.9 5.6];

% voreingestellt: blaue Linienfarbe
p1=plot(x, y1);

% 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.5 0.4 0.3];
farbe2=[0.8 0.2 0.7];
farbe3=[0.1 0.8 0.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');

% Beispieldatensatz
x=[1:10];
y1=[1 2 3 2.4 6 2 9 2 4.2 2.3];
y2=[3 7 8 3.4 8 7 4 1 6.2 5.4];
y3=[5 2.3 9 2.9 4 2 2.5 9 4.2 3.2];

% Darstellung der 3 Datensätze mit user-definierten Farben unter Zugriff auf den Struct S_farbe mit dem farbdefinierenden Feldern farbe1, farbe2 & farbe3
p1=plot(x, y1); set(p1, 'Color', S_farbe.farbe1);
p2=plot(x, y2); set(p2, 'Color', S_farbe.farbe2);
p3=plot(x, y3); set(p3, 'Color', S_farbe.farbe3);
 


gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2008, 12:07     Titel:
  Antworten mit Zitat      
Danke für die Antwort jochma

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.
 
jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 20.02.2008, 12:50     Titel:
  Antworten mit Zitat      
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=[0 0 1];
% 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+[0 0.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.

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 20.02.2008, 13:37     Titel:
  Antworten mit Zitat      
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, 23:54, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2008, 23:03     Titel:
  Antworten mit Zitat      
Danke jochma und outsider für die Vorschläge, ich muss erste einmal beide überprüfen.

danke nochmals
 
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.