Frage an legend, matlab – MATLAB-Diagrammdarstellung: Zuweisen von Legendenbezeichnungen während der Darstellung

10

Ich zeichne Daten in einem typischen MATLAB-Streudiagrammformat. Normalerweise würde ich beim Plotten mehrerer Datensätze den Befehl 'hold on;' verwenden und dann alle Daten plotten, gefolgt von diesem Befehl, um meine Legende zu erhalten:

legend('DataSet1', 'DataSet2') % etcetera

Die (mehreren) Datensätze, die ich auf denselben Achsen zeichne, müssen jedoch nicht jedes Mal dieselben Datensätze sein. Ich zeichne bis zu sechs verschiedene Datensätze auf denselben Achsen, und es kann eine beliebige Kombination davon angezeigt werden (je nachdem, was der Benutzer für die Anzeige auswählt). Offensichtlich wäre das eine Menge anderer Dinge, wenn ich die Legende auf traditionelle Weise aufbauen wollte.

Ich würde wirklich gerne jedem DataSet einen Namen zuweisenwie es gezeichnet ist so dass ich danach einfach eine legende aller angezeigten daten aufrufen kann.

... oder irgendeine andere Lösung für dieses Problem, die sich jeder vorstellen kann ..?

Deine Antwort

5   die antwort
3

Sie können Folgendes ausprobieren

for k = 1:10

   h(k) = plot(...);
   name{k} = ['condition ' num2str(k)];

end

legend(h, name);
Das funktioniert auch. CaptainProg
11

Eine Möglichkeit besteht darin, die Vorteile von zu nutzen'UserData' Eigenschaft wie folgt:

figure;
hold on
plot([0 1], [1 0], '-b', 'userdata', 'blue line')
plot([1 0], [1 0], '--r', 'userdata', 'red dashes')

% legend(get(get(gca, 'children'), 'userdata'))                      % wrong
legend(get(gca, 'children'), get(get(gca, 'children'), 'userdata'))  % correct

Bearbeiten: Wie der Fragesteller betonte, könnte die Originalversion außer Betrieb geraten. Um dies zu beheben, geben Sie an, welches Handle zu welchem ​​Etikett gehört (in der festen Version in der richtigen Reihenfolge).

Fantastisch. Vielen Dank. CaptainProg
Das ist eine wirklich schöne Lösung! H.Muster
Diese Methode scheint die Farben und Namen zu verwechseln ... Es sei denn, ich setze sie falsch um? CaptainProg
Was meinst du genau ... Ah, ich verstehe. Ok, probiere die neue Version! tmpearce
0

e ein Array.

%for example 

legendset = {}

for i = 1:10 

%blabla
%Then in the fore loop say: 

legendset = [legendset;namedata(i)]

%It puts all names in a column of legendset. 
%Make sure namedata are characters. 

%foreloop ends
end

%Then after the foreloop say: 

legend(legendset). 
19

die DisplayName-Eigenschaft für jedes Diagramm festzulegen:

figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')

http://www.mathworks.com/help/matlab/ref/line_props.html

Randnotiz: Ich habe viele kleine Tricks wie diese gefunden, indem ich die Figur so aussehen ließ, wie ich es will, dann die Menüoption "Datei" der Figur "M-Datei generieren ..." auswählte und den generierten Ausgabecode überprüfte.

Gute Randnotiz! samad montazeri
10

Benutzen'DisplayName' Als einplot() Eigentum, und nennen Sie Ihre Legende als

legend('-DynamicLegend');

Mein Code sieht so aus:

x = 0:h:xmax;                                  %// get an array of x-values
y = someFunction;                              %// function
plot(x, y, 'DisplayName', 'Function plot 1');  %// plot with 'DisplayName' property

legend('-DynamicLegend',2);                    %// '-DynamicLegend' legend

Quelle:http://undocumentedmatlab.com/blog/legend-semi-documented-feature/

Dies oder Jonathans Antwort sollten die akzeptierten sein! Ela782

Verwandte Fragen