Verfasst am: 03.03.2014, 20:20
Titel: Legende für mehrere Plots richtig darstellen
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]) holdall 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.
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]) holdall% hold all ist hier überflüssig? legend('Differenz 0-1.000','Differenz 0-25.000');
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...
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!
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');
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?
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.
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
Viele Grüße,
Nras.
rudi89
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 06.03.2014, 15:39
Titel:
Vielen Dank für die Antwort!
Es funktioniert endlich. Das war genau das was ich suchte
Viele Grüße
rudi89
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.