Verschieben der vorhandenen Legende in Matplotlib 1.5.1

Ich habe Antworten auf eine vorherige Frage ohne Erfolg in Matplotlib 1.5.1.

Ich habe eine Seefigur:

import seaborn as sns %matplotlib inline import matplotlib.pyplot as plt import numpy as np tips = sns.load_dataset("tips") g = sns.jointplot("total_bill", "tip", data = tips[["total_bill", "tip"]].applymap(lambda x : -np.log10(x))) 

Das funktioniert nicht:

 g.ax_joint.legend(loc = 'lower right') 

So gut wie das:

 plt.legend(bbox_to_anchor=(1.05, 1), loc=4, borderaxespad=0.) /usr/local/lib/python3.4/dist-packages/matplotlib/axes/_axes.py:520: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots. warnings.warn("No labelled objects found. " 

Was ist der Weg, um eine vorhandene Legende zu finden, um in diesem Fall rechts zu senken?


Nicht eine elegante Lösung für jetzt ist:

 ll = g.ax_joint.get_legend().get_texts()[0]._text g.ax_joint.get_legend().remove() g.ax_joint.text( -12, -12, ll, fontsize=14) 

Allerdings glaube ich, dass es einen besseren Weg geben sollte.

  • Wie man diesen Pandas-Code optimiert, um schneller zu laufen
  • Plotten von Bars aus Dataframe mit Seaborn FacetGrid
  • Balkendiagramm im Meeresboden
  • Wie finde ich den Median in einem (seaborn) KDE-Plot?
  • Wie vermeiden Sie wissenschaftliche Notation bei der Annotation einer seaborn Clustermap?
  • Fehler beim Importieren von Seaborn in ipython Notebook - Arbeiten in ipython
  • Größere Farbpalette in Matplotlib für SciPys Dendrogramm (Python)
  • Plotten von zwei Verteilungen in seaborn.jointplot
  • One Solution collect form web for “Verschieben der vorhandenen Legende in Matplotlib 1.5.1”

    Es gibt keine leichte (mit Strings wie 'lower right' ) Weg, um eine bestehende Legende zu verlagern, die mir bewusst ist.

    Um die Griffe einer vorhandenen Legende zu erhalten, kannst du legend.legendHandles() . Für die Etiketten gibt legend.get_texts() Ihnen die legend.get_texts() . Um die eigentlichen Etiketten abzurufen, solltest du lieber .get_text() anstelle des privaten Attributs _text .

    Im Folgenden werden die Griffe und Etiketten einer vorhandenen Legende auf eine neue kopiert. Andere Eigenschaften der Legende werden nicht kopiert.

     legend = g.ax_joint.get_legend() labels = (x.get_text() for x in legend.get_texts()) g.ax_joint.legend(legend.legendHandles, labels, loc='lower right') 

    Ich habe vorher mit ax.get_legend_handles_labels() aber das wird in den Achsen suchen, nicht die Legende und ist in diesem Fall nicht sinnvoll.

    Python ist die beste Programmiersprache der Welt.