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

Legende für mehrere Plots richtig darstellen

 

rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 20:20     Titel: Legende für mehrere Plots richtig darstellen
  Antworten mit Zitat      
Hallo,

ich habe mehrere Einzelplots in einer Darstellung zusammengefügt. Jeder Plot hat dabei eine andere Farbe. Jetzt kann ich allerdings keine richtige Legende dazu einfügen. Ich kann zwar mehrere Graphen benennen dan taucht aber bei jedem die gleiche farbe auf.....

Kann mir jemand helfen?

Die eingabe sieht etwa so aus...
Code:

plot(diff1,'color',[1,0,0])
hold on
plot(diff2,'color',[1,0.5,0])
hold all
legend('Differenz 0-1.000','Differenz 0-25.000');


problem ist jetzt das zwar zwei datensätze aufgelistet werden auch mit richtiger beschriftung, aber die farbe ist bei beiden gleich. Ich suche nach einem befehl wie ich jetzt dem ersten plot auch in der legende die farbe rot und dem anderen orange zuordnen kann.


reichkrystofski
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 26.11.13
Wohnort: Biederitz
Version: 2006b 32bit, 2009b 64bit
     Beitrag Verfasst am: 03.03.2014, 20:51     Titel:
  Antworten mit Zitat      
Hallo,

du musst dir die plot handles merken und dann dem legend Befehl mit übergeben:
Code:

pH1=plot(diff1,'color',[1,0,0])
hold on
pH2=plot(diff2,'color',[1,0.5,0])
hold all
legend([pH1,pH2],'Differenz 0-1.000','Differenz 0-25.000');
 

bzw. die Beschriftung als cell-Array:
Code:
legend([pH1,pH2],{'Differenz 0-1.000','Differenz 0-25.000'});
Private Nachricht senden Benutzer-Profile anzeigen
 
rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 16:00     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.

Leider funktioniert das auch nicht... bekomme dann folgende Fehlermeldung angezeigt:

Operands to the || and && operators must be convertible to logical scalar values.

Error in legend (line 194)
elseif narg > 0 && ~ischar(varargin{1}) && ...

was das genau bedeutet weiß ich allerdings nicht...
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 04.03.2014, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe keinen Grund, warum das von dir original gepostete nicht funktionieren sollte. Bei mir funktioniert das auch einwandfrei. Nun sind aber [1,0,0] und [1,0.5,0] recht ähnliche Farben. Kann es sein, dass die nur scheinbar gleich aussehen?

Was passiert, wenn du für die zweite Farbe beispielsweise [0,0.5,1] eingibst? Folgender Code erzeugte die angehängte Graphik:
Code:
diff1 = rand(10,1); diff2=rand(10,1);
figure
plot(diff1,'color',[1,0,0])
hold on
plot(diff2,'color',[0,0.5,1])
hold all  % hold all ist hier überflüssig?
legend('Differenz 0-1.000','Differenz 0-25.000');


Zitat:
Operands to the || and && operators must be convertible to logical scalar values.

Error in legend (line 194)

Ist so nicht nachvollziehbar. Bitte den Code posten, mit dem der Fehler erzeugt wurde.

Viele Grüße,
Nras.

untitled.png
 Beschreibung:

Download
 Dateiname:  untitled.png
 Dateigröße:  5.8 KB
 Heruntergeladen:  513 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 19:40     Titel:
  Antworten mit Zitat      
Meine eingabe lautet wie folgt: (diesmal mit gelb als zweiter farbe), habe allerdings keine graphen, sondern matrizen als importierte dateien, diese stellen eine fläche als 2D-plot dar.

>> plot(diff1,'color',[1,0,0])
>> plot(diff1,'color',[1,0,0])
>> figure
>> plot(diff1,'color',[1,0,0])
>> hold on
>> plot(diff2,'color',[1,1,0])
>> legend('Differenz 0-1.000','Differenz 0-25.000');

problem ist jetzt das die legende zwar dargestellt wird, aber bei dem zweiten eintrag auch die farbe rot auftaucht... ich hätte gerne das der erste eintrag für die rote fläche ist (das passt ja) und der zweite für die gelbe...

test_forum.PNG
 Beschreibung:

Download
 Dateiname:  test_forum.PNG
 Dateigröße:  65.14 KB
 Heruntergeladen:  484 mal
 
rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 19:43     Titel:
  Antworten mit Zitat      
natürlich reichen die letzten 4 zeilen für die erzeugung des dargestellten plots.... der rest war zu viel kopiert Smile

>> plot(diff1,'color',[1,0,0])
>> hold on
>> plot(diff2,'color',[1,1,0])
>> legend('Differenz 0-1.000','Differenz 0-25.000');
 
reichkrystofski
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 26.11.13
Wohnort: Biederitz
Version: 2006b 32bit, 2009b 64bit
     Beitrag Verfasst am: 04.03.2014, 20:49     Titel:
  Antworten mit Zitat      
Das ist seltsam. Bei mir führen alle bisher vorgeschlagenen Varianten des legend-Befehls (inklusive deiner) zum gewünschten Ergebnis.

Welche Matlab-Version verwendest du? Bei sehr alten Versionen könnte die Verhaltensweise noch anders gewesen sein.

Überschreibt evtl. eine andere legend-Funktion die Matlab-funktion?

gib mal ein
Code:


Das könnte auch die Fehlermeldung erklären.
Private Nachricht senden Benutzer-Profile anzeigen
 
walle
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 21:18     Titel:
  Antworten mit Zitat      
Hallo!

Ich gehe davon aus, dass diff1 kein Zeilen oder Spaltenvektor ist, sondern ein zweizeiliges oder zweispaltiges Array ist. Beide Datenreihen des Array's werden in rot geplottet und die beiden Legendeneinträgen diesen beiden Graphen zugeordnet.
Bitte mal das Format von diff1 überprüfen!
Private Nachricht senden Benutzer-Profile anzeigen
 
rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2014, 08:38     Titel:
  Antworten mit Zitat      
wenn ich

Code:


eingebe, dann schreibt mir matlab folgendes:

C:\Program Files\MATLAB\R2013a\toolbox\matlab\scribe\legend.m

die matlab version ist aus 2013... dürfte also keine probleme machen

die Daten von diff1 sind eine exceltabelle, die ich als matrix (131x151) eingefügt habe.
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 05.03.2014, 09:01     Titel:
  Antworten mit Zitat      
Hallo zusammen,

diff1 und diff2 sind Matrizen, wie angeben. Damit ist der erste Legendeneintrag entsprechend der ersten Zeile von diff1 und der zweite Legendeneintrag entsprechend der zweiten Zeile von diff1. Die haben auch beide dieselbe Farbe im Plot, nämlich beide rot. Das passt also alles und macht auch Sinn.

Abhilfe schafft folgender workaround Somit hilft folgendes:
Code:
diff1 = rand(100,20); diff2=rand(100,20);
figure
plot(diff1,'color',[1,0,0])
hold on
plot(diff2,'color',[1,0.5,0])

% Für Legende die Reihenfolge der Children ändern. An Stelle 2 kommt die
% letzte Stelle (ein Teil des Datensatzes diff2)
Chdrn = get(gca,'Children');
C2 = Chdrn(2);
Chdrn(2) = Chdrn(end);
Chdrn(end) = C2;
set(gca,'Children',Chdrn)
legend('Differenz 0-1.000','Differenz 0-25.000');


Alternativ könntest du auch beim Plotbefehl etwas drehen: und erst die erste Zeile von diff1 plotten, dann komplett diff2 und anschließend die restlichen Zeilen von diff1:
Code:
figure
plot(diff1(1,:),'color',[1,0,0])
hold on
plot(diff2,'color',[1,0.5,0])
plot(diff2(2:end,:),'color',[1,0,0])
legend('Differenz 0-1.000','Differenz 0-25.000');


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2014, 07:29     Titel:
  Antworten mit Zitat      
Hallo Nras,

danke für die Antwort.

Die Legende passt jetzt farblich. Problem ist jetzt nur das innerhalb der Flächen noch ein roter Graph zu sehen ist, das kommt wohl durch die Trennung des ersten Plots. Gibt es eine Lösung, wie dieser nicht dargestellt wird?
Ich habe bis zu 6 Plots die ich in einer Graphik darstellen möchte. Funktioniert das dann auch noch mit dem Ändern der Reihenfolge?

Danke und viele Grüße
rudi89

test_forum_2.PNG
 Beschreibung:

Download
 Dateiname:  test_forum_2.PNG
 Dateigröße:  72.36 KB
 Heruntergeladen:  453 mal
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 06.03.2014, 09:35     Titel:
  Antworten mit Zitat      
Hallo,

okay okay. Das ist natürlich alles unschön. Wenn das Problem mit der ersten vorgeschlagenen Methode entstanden ist, dann kannst du wohl mal versuchen, nach dem legend()-Befehl einfach die Children wieder auf die Original Children zurücksetzen. Die Legende sollte das dann nicht mehr ändern - glaube ich.
Code:
legend('Differenz 0-1.000','Differenz 0-25.000');
Chdrn(end) = Chdrn(2);
Chdrn(2) = C2;
set(gca,'Children',Chdrn)


Ich sehe ein, dass das etwas unschön ist und vielleicht hat ja jemand noch einen geschickteren Weg dafür. Das würde mich auch interessieren.

Viele Grüße,
Nras.

Edit: Mit ein wenig Nachdenken, dass das ja nicht die angedachte Lösung sein kann: es gibt doch einen sehr eleganten Weg dafür, der basiert auf dem Beitrag von reichkrystofski.
Code:
diff1 = rand(200,50); diff2=rand(200,50);
figure
pH1 = plot(diff1,'color',[1,0,0]);
hold on
pH2 = plot(diff2,'color',[1,0.5,0]);
legend([pH1(1);pH2(1)],'Differenz 0-1.000','Differenz 0-25.000');  

Also kannst du den ganzen Umweg mit den Children getrost in die Tonne kloppen Smile

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
rudi89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2014, 15:39     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort!

Es funktioniert endlich. Das war genau das was ich suchte Smile

Viele Grüße
rudi89
 
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.