Verschieben und ändern der Größe Legenden-box in matplotlib

Ich bin erstellen Diagramme mit Matplotlib, dass ich speichern Sie als SVG exportieren .pdf + .pdf_tex mit Inkscape, und enthalten die .pdf_tex-Datei in ein LaTeX-Dokument.

Dies bedeutet, dass ich die Eingabe der LaTeX-Befehle in überschriften, Legenden usw.., dass ein Bild wie dieses
Verschieben und ändern der Größe Legenden-box in matplotlib

leistet, wie diese, wenn ich es in mein LaTeX-Dokument. Beachten Sie, dass die schriftart für die zahlen auf den Achsen zu ändern, und der LaTeX-code in der Legende kompiliert wird:

Verschieben und ändern der Größe Legenden-box in matplotlib

Code für die Handlung (wie der export nach SVG wird hier nicht gezeigt, aber gezeigt werden können, auf Anfrage):

import numpy as np
x = np.linspace(0,1,100)
y = x**2

import matplotlib.pyplot as plt
plt.plot(x, y, label = '{\\footnotesize \$y = x^2\$}')
plt.legend(loc = 'best')
plt.show()

Das problem ist, wie Sie sehen können, dass die Ausrichtung und die Größe des Rahmens um die Legende falsch ist. Dies ist, weil die Größe der text des Labels ändert, wenn das Bild Durchlaufen Inkscape + pdflatex (wegen \footnotesize etc. verschwindet, und die Schriftgröße ändert).

Habe ich herausgefunden, dass ich wählen kann, die Platzierung des Labels, indem entweder

plt.label(loc = 'upper right')

oder wenn ich mehr Kontrolle haben möchten, die ich verwenden kann

plt.label(bbox_to_anchor = [0.5, 0.2])

aber ich habe nicht gefunden, einen Weg, um die box um das label kleiner. Ist das möglich?

Eine alternative zu der box kleiner ist, entfernen Sie den Umriss der box mit so etwas wie

legend = plt.legend()
legend.get_frame().set_edgecolor('1.0')

und bewegen Sie anschließend das Etikett auf, wo ich es will. In diesem Fall würde ich mag, um in der Lage sein, die Platzierung des Labels, indem zuerst lassen python/matplotlib legen Sie es mit

plt.label(loc = 'upper right')

und dann beispielsweise verschieben es etwas nach rechts. Ist das möglich? Ich habe versucht mit get_bbox_to_anchor() und set_bbox_to_anchor(), aber kann nicht scheinen, um es zu arbeiten.

InformationsquelleAutor Filip S. | 2014-04-23
Schreibe einen Kommentar