2016-12-07 3 views
1

Ich versuche, automatisierte Plots mit Matplotlib, mit mehreren verschiedenen Funktionen übereinander (der Hintergrund ist eine gefüllte Kontur Plot, eine Ebene darüber ist ein Pcolormesh). Das oberste Merkmal, das ich zu zeichnen versuche, sind mehrere Streudiagramme mit verschiedenen Beschriftungen und Symbolen.Fix Größe der Legende in Matplotlib

Ich versuche, eine Legende zu diesem Plot hinzuzufügen, die derzeit mit den folgenden Befehlen:

leg = ax.legend(legplots, 
      legnames, 
      scatterpoints=1, 
      loc='upper center', 
      ncol=3, 
      fontsize=14, 
     bbox_to_anchor=(0.5, -0.14), 
      fancybox=True, shadow=True) 

dass ax seien die Hauptachsen ist, und dass legplots und legnames sind Listen von Streudiagramme und ihre entsprechenden Etiketten jeweils.

Das Hinzufügen der Legende funktioniert korrekt, aber da die Anzahl der Beinplots, die ich habe (und deren Namenlänge), variiert, wird die Legende bei der Animation der Diagramme größer und kleiner. Wie kontrolliere ich die Größe der Legendenbox und die Spaltenbreiten innerhalb der Legende? Ist das möglich?

Antwort

0

Im Moment hat Ihre Bounding Box eine Größe von 0, da Sie nur ihre Position angeben ((0.5, -0.14)).

Sie können die Begrenzungsbox der Legende größer als 0 und auch groß genug für die maximale Größe, die es für die maximale Anzahl von Elementen zu passen haben müssen. Ich denke, dass Sie diese Größe finden müssen durch Ausprobieren.

So mit der vollen 4-Tupel-Notation

bbox_to_anchor=(x0, y0, width, height) 

in Verbindung mit einem entsprechenden loc Parameter und dem Stichwort Argument mode="expand" ermöglicht es Ihnen, die Legende groß genug für Ihre Bedürfnisse zu machen. Für eine detailliertere Erläuterung der 4-Tupel-Notation siehe this post und auch die legend location guide.

+0

Das funktioniert also ... irgendwie. Das Legendenfeld behält eine feste Breite bei, aber es scheint nun Probleme zu geben, zwei Überschriften übereinander zu legen. z. B .: http://i.imgur.com/RYemFRS.png – Laxsnor

+0

Das ist in der Tat sehr seltsam. Ich sehe nicht, wie dies feierlich mit der Festlegung der Begrenzungsbox der Legende zusammenhängen kann. Ich würde vermuten, dass dieses Problem mit dem Rest des Codes zusammenhängt und um es zu lösen, müsste man ein [MCVE] erstellen. – ImportanceOfBeingErnest