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

Farben in Legende nur einmal anzeigen

 

mchatt
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2021, 11:46     Titel: Farben in Legende nur einmal anzeigen
  Antworten mit Zitat      
Hallo Zusammen,

ich habe folgende Frage: wie schaffe ich in Matlab bei einer Legende, dass die gleichen Farben nur einmal angezeigt werden.
Beispiel: Ich habe 10 Plots: 3 rote, 3 blaue und 4 grüne. Wenn ich nun die legende erstelle, erhalte ich 10 Einträge. Ich hätte aber gerne, dass Nur 3 Einträge in der Legende mit den 3 Farben angezeigt werden. Die Reihenfolge der Diagramme ist unregelmäßig, also es ist nicht immer klar, welche Positionen die jeweiligen Farben besitzen.

Ich hoffe, es ist verständlich beschrieben und freue mich auf Eure Antwort!

Herzliche Grüße,
_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.05.2021, 22:12     Titel:
  Antworten mit Zitat      
Hallo,

du kannst bei legend angeben, welchen Plot-Objekten du die Legende zuordnen willst. Siehe das Beispiel "Included Subset of Graphics Objects in Legend" aus der Doku.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2021, 11:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja das habe ich schon gesehen, aber dafür muss man im voraus schon wissen welche Position welche Kurve hat.
Bei mir ist ehe so dass ich eine For-Schleife davor habe und je nach Situation erhalte einen Graph. Das Heißt es ist nicht immer Klar was p1, p2, p3 etc. entsprechen. Daher kann ich es nicht wie am Beispiel umsetzen.
_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2021, 12:07     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das so salopp sagen darf: wenn es für dich nicht immer klar ist, was p1, p2 etc. ist, wie soll es MATLAB oder mir klar sein?

Damit ich verstehe, was du hier genau meinst, ist wohl Beispiel-Code nötig.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2021, 11:15     Titel:
  Antworten mit Zitat      
Hallo,

ja, das würde Sinn machen Smile Es ist ein Teil eines großes Programmes, hier ist aber ein Ausschnitt Smile
Code:

for f = 1:height(Table_Beispieltag_Varklasse_hour)
   
        if Table_Beispieltag.Option3 (f)== 1
            fill(Klasse.Var1,Klasse.Oben,[1 0.75 0],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 1') ;
        elseif Table_Beispieltag.Option3 (f)== 2
            fill(Klasse.Var1,Klasse.Oben,[0.77 0.38 0.06],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 2') ;
        elseif Table_Beispieltag.Option3 (f)== 3
            fill(Klasse.Var1,Klasse.Oben,[0.78 0.17 0.28],'FaceAlpha',0.4,'EdgeColor', 'none','DisplayName','Klasse 3') ;
        elseif Table_Beispieltag.Option3 (f)== 4
            fill(Klasse.Var1,Klasse.Oben,[1 0.65 0],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 4') ;
        elseif Table_Beispieltag.Option3 (f)== 5
            fill(Klasse.Var1,Klasse.Oben,[0.52 0.52 0.51],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 5') ;
        elseif Table_Beispieltag.Option3 (f)== 6
            fill(Klasse.Var1,Klasse.Oben,[0.74 0.20 0.64],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 6') ;
        elseif Table_Beispieltag.Option3 (f)== 7
            fill(Klasse.Var1,Klasse.Oben,[1 1 0.6],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 7') ;
         elseif Table_Beispieltag.Option3(f)== 8
            fill(Klasse.Var1,Klasse.Oben,[0 0.75 1],'FaceAlpha',0.3,'EdgeColor', 'none','DisplayName','Klasse 8') ;
        end
    end

 


Ich danke Dir!

Herzliche Grüße,
_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2021, 11:25     Titel:
  Antworten mit Zitat      
Hallo,

und nun? Was soll als Legende angezeigt werden? Alle 8 Farben? Die Farben, die mindestens einmal verwendet wurden?

Die Flächen werden doch (anscheinend - ausführbar ist der Code mangels Beispieldaten ja nicht) in jeder Iteration genau übermalt? Ist das wirklich sinnvoll?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2021, 11:37     Titel:
  Antworten mit Zitat      
Ich habe ein Bild von der Legende angehängt. Da ist es zu sehen dass Klasse 7 5 mal erscheint. Nun hätte ich es gerne so, dass Klasse 7 nur einmal in der Legende dargestellt wird.
Ja das ist auch der Ziel, dass der Hintergrund übermalt wird Smile

Danke für Deine Antwort Smile

Hezliche Grüße,

legende.JPG
 Beschreibung:

Download
 Dateiname:  legende.JPG
 Dateigröße:  20.43 KB
 Heruntergeladen:  141 mal

_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2021, 19:59     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Da ist es zu sehen dass Klasse 7 5 mal erscheint. Nun hätte ich es gerne so, dass Klasse 7 nur einmal in der Legende dargestellt wird.

Das ist soweit klar, beantwortet aber nicht meine Frage: sollen alle 8 Farben oder nur die Farben, die mindestens einmal verwendet wurden, angezeigt werden?

Die ganze if-Anweisung sollte man sich übrigens schenken können, wenn man die Farben und FaceAlpha-Werte als Matrix bzw. Vektor anlegt und dann mit Table_Beispieltag.Option3 hinein indiziert.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2021, 08:19     Titel:
  Antworten mit Zitat      
Also es sollen nur die Farben, die mindestens einmal verwendet wurden, angezeigt werden.

Wie würde das aussehen, wenn es so machen würde ? (Also bezogen auf Deinen Tipp mit der If-Anweisungen)

Vielen Dank!

Herzliche Grüße,
_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2021, 08:58     Titel:
  Antworten mit Zitat      
Hallo,

vorab folgendes einfügen:
Code:
colors = [1 0.75 0
0.77 0.38 0.06
0.78 0.17 0.28
1 0.65 0
0.52 0.52 0.51
0.74 0.20 0.64
1 1 0.6
0 0.75 1];
fa = ones(8,1)*0.3; fa(3) = 0.4;

% Beispiel:
% Table_Beispieltag.Option3 = randi(8, [10,1]);
klassenVorhanden = find(ismember(1:8, Table_Beispieltag.Option3));
for k = klassenVorhanden
    p(k) = fill(NaN, NaN, colors(k,:),'FaceAlpha',fa(k),'EdgeColor', 'none','DisplayName',"Klasse "+k');
    hold on
end
hold off
legend('show')


Nach dem Prinzip kannst du auch deinen eigentlichen Code verschlanken.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2021, 09:34     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für den Tipp! es funktioniert mit den ganzen if-Schleifen Reduktion!
Allerdings ist das Problem mit der Legende immer noch vorhanden. Ich habe ein Bild angehängt wie es bei mir aussieht.
Die gleichen Farben werden mehrmals in der Legende aufgerufen!

Vielen Dank!

Herzliche Grüße,
Malek

Legende_2.JPG
 Beschreibung:

Download
 Dateiname:  Legende_2.JPG
 Dateigröße:  59.65 KB
 Heruntergeladen:  129 mal

_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2021, 09:47     Titel:
  Antworten mit Zitat      
Hallo,

neuer Versuch:

Code:
colors = [1 0.75 0
0.77 0.38 0.06
0.78 0.17 0.28
1 0.65 0
0.52 0.52 0.51
0.74 0.20 0.64
1 1 0.6
0 0.75 1];
fa = ones(8,1)*0.3; fa(3) = 0.4;

% Beispiel:
Table_Beispieltag.Option3 = randi(8, [10,1]);
klassenVorhanden = find(ismember(1:8, Table_Beispieltag.Option3));
clear p
for k = 1:numel(klassenVorhanden)
    klasse = klassenVorhanden(k);
    p(k) = fill(NaN, NaN, colors(klasse,:),'FaceAlpha',fa(klasse),'EdgeColor', 'none','DisplayName',"Klasse "+klasse);
    hold on
end
hold off
legend(p, {p.DisplayName})


Du kannst übrigens den Code gerne auch anpassen. Das Prinzip sollte ja nun klar sein.
Da ich dein tatsächliches Beispiel nicht ausführen kann, hast du da deutlich mehr Möglichkeiten als ich.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2021, 09:41     Titel:
  Antworten mit Zitat      
Hallo Harald,

irgendwie klappt das in meinem Code nicht Crying or Very sad
Hier ist der gesamte Ausschnitt von meinem Code:

Code:

clc;
clear all;
anz = 1440;
startDate =datenum('2021-05-17 00:00:00','yyyy-MM-dd HH:mm:ss');
d = zeros(anz, 1);
for k = 1 : anz
   d(k)= startDate + k / (24 * 60);
end
Datetime= datetime(datestr(d,'yyyy-MM-dd HH:mm:ss'), 'Format', 'yyyy-MM-dd HH:mm:ss');
Var_Optionen= randi([1 8], length (Datetime),1);
Table_Beispieltag= table(Datetime, Var_Optionen);

colors = randi([0 1],8,3);                %RGB Werte für Plots
fa = ones(8,1)*0.3;    %Tranzparenzwerte für Facealpha (Fill Plots)
figure          
klassenVorhanden = find(ismember(1:8, Table_Beispieltag.Var_Optionen));
for m = klassenVorhanden
for i = 1:height(Table_Beispieltag)
   
    if  Table_Beispieltag.Var_Optionen (i) == m
        Date1 = datenum (Table_Beispieltag.Datetime (i));
        Date2= datenum (Table_Beispieltag.Datetime (i+1));
        Oben= [0;1200;1200;0;0];
        Klasse= table([Date1;Date1;Date2;Date2;Date1],Oben);
        Klasse.Var1= datetime(Klasse.Var1, 'ConvertFrom', 'datenum');      
        p(m) = fill(Klasse.Var1,Klasse.Oben, colors(m,:),'FaceAlpha',fa(m),'EdgeColor', 'none','DisplayName',"Klasse "+m');
    end
     hold on
end
end
hold off
legend(p, {p.DisplayName})
 


Da mein Datensatz zu groß ist habe ich einfach ein Datenbeispiel generiert.

Vielen Dank!

Herzliche Grüße,
_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.05.2021, 10:15     Titel:
  Antworten mit Zitat      
Hallo,

der entscheidende Punkt ist, dass du meinen Code zusätzlich zu dem bestehenden Code einfügst (und so wie er ist). Die Plots mit NaN sind nicht sichtbar, erzeugen aber die gewünschten Legenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mchatt
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 01.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2021, 11:55     Titel:
  Antworten mit Zitat      
Hallo Harald,

irgendwie klappt es bei mir nicht. Ich habe hier aber die Lösung gefunden und es klappt wunderbar:
https://de.mathworks.com/matlabcent.....unq?s_tid=prof_contriblnk

Es ist eine fertige Function, die man einfach runterladen kann Smile

Vielen Dank!

Herzliche Grüße,
[url][/url]
_________________

mchatt
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.