Dynamische Legende (Aktualisierungen in jeder Rekursion)

8

Ich habe eine for i=1:15 bekommen. Im Inneren erzeuge ich eine Variable d=1:0.01:10 , welche die x'x-Achse ist, und auf dieser Grundlage erstelle ich eine kontinuierliche Funktion F (d), die 2 eindeutige Variablen Pitch und Gier hat. Ich zeichne es dann mit verschiedenen Farben in jeder Rekursion mit cmap = hsv(15); . Also dann ist es:

%Vor%

Dieser Code aktualisiert die eindeutigen Pitch- und Gierwerte bei jeder Rekursion (ohne Leerzeichen zwischen ihnen, so dass es irgendwie irritierend ist), aber versagt:

  
  1. Tragen Sie die richtige Farbe auf, die in der Abbildung sichtbar ist.
  2.   
  3. Behalten Sie die Farbe der vorherigen Iteration und die Werte von pitch,yaw .
  4.   
    
Kots 10.02.2014, 19:15
quelle

2 Antworten

27

Semidokumentierte Lösung

Das Hinzufügen von Zeilen zu einer Legende in einer Schleife kann mit "dynamischen Legenden", erfolgen, wie auf undocumentedmatlab beschrieben. com .

Die Idee besteht darin, den Befehl legend durch:

zu ersetzen %Vor%

Aktualisieren Sie dann den Befehl plot mit einem Parameter DisplayName :

plot(d,F,'Linewidth',1.0,'DisplayName',sprintf('pitch,yaw: %d,%d',pitch,yaw));

Dann werden Plots, die den Achsen hinzugefügt wurden, zur Legende hinzugefügt:

Wenn halb-dokumentierte Features nicht dein Ding sind, benutze den DisplayName Trick und schalte einfach den legend aus / ein. Das heißt, anstelle von -DynamicLegend :

%Vor%

Eine andere Variante, die weder DisplayName noch -DynamicLegend verwendet, ist, die Legende mit zu löschen und neu zu erstellen ein Array von gespeicherten Strings.

Offizielle Lösung

Die offizielle Lösung Empfohlen von MathWorks , greifen Sie also die Line-Handles der vorhandenen Legenden und aktualisieren Sie die Legende manuell mit diesen Handles. Dies ist ziemlich schmerzhaft im Vergleich zu der obigen dynamischen Legendenlösung:

%Vor%     
chappjc 10.02.2014, 19:29
quelle
1

Als HG2 (Standard in R2014 +) Alternative zur offiziellen MW-Lösung von @ chappjc kann man den Vorteil nutzen, dass die Legende als eigene Klasse re-implementiert wird und nicht als Klumpel anderer Grafikobjekte. Dies hat die Dinge ein wenig aufgeräumt, so dass sie einfacher zu interagieren sind.

Diese neuen legend -Objekte verfügen jedoch nicht über eine freigelegte Eigenschaft zur Verknüpfung von Legenden Objekte zu geplotteten Objekten haben sie eine solche Eigenschaft, 'PlotChildren' , die ein Array von Objektgriffen ist.

Zum Beispiel:

%Vor%

Rückkehr:

%Vor%

Um unser Objekt legend zu aktualisieren, ohne legend erneut aufzurufen, können wir die Eigenschaften 'PlotChildren' und 'String' unseres vorhandenen Objekts legend ändern. Solange ein 'String' -Eintrag für jedes Objekt in 'PlotChildren' existiert, wird es in der Legende gerendert.

Zum Beispiel:

%Vor%

Was zurückgibt:

Diese Funktionalität kann in eine generische Hilfsfunktion eingebunden werden, um das Anhängen eines oder mehrerer Legendeneinträge zu unterstützen. Wir haben das mit legtools auf GitHub

gemacht     
excaza 22.09.2016 16:08
quelle