So ändern Sie die Legendengröße mit matplotlib.pyplot

323

Einfache Frage hier: Ich versuche, die Größe meiner Legende matplotlib.pyplotkleiner zu machen (dh den Text kleiner zu machen). Der Code, den ich verwende, sieht ungefähr so ​​aus:

plot.figure()
plot.scatter(k, sum_cf, color='black', label='Sum of Cause Fractions')
plot.scatter(k, data[:, 0],  color='b', label='Dis 1: cf = .6, var = .2')
plot.scatter(k, data[:, 1],  color='r',  label='Dis 2: cf = .2, var = .1')
plot.scatter(k, data[:, 2],  color='g', label='Dis 3: cf = .1, var = .01')
plot.legend(loc=2)
Mike
quelle

Antworten:

541

Sie können eine individuelle Schriftgröße für die Legende festlegen, indem Sie das propSchlüsselwort anpassen .

plot.legend(loc=2, prop={'size': 6})

Dies erfordert ein Wörterbuch mit Schlüsselwörtern, die matplotlib.font_manager.FontPropertiesEigenschaften entsprechen . Legende finden Sie in der Dokumentation :

Schlüsselwortargumente:

prop: [ None | FontProperties | dict ]
    A matplotlib.font_manager.FontProperties instance. If prop is a 
    dictionary, a new instance will be created with prop. If None, use
    rc settings.

Ab Version 1.2.1 ist es auch möglich, das Schlüsselwort zu verwenden fontsize.

Yann
quelle
1
Können Sie mir sagen, wo ich Details finden kann plot.rcParams.update?
Haccks
64

Das sollte reichen

import pylab as plot
params = {'legend.fontsize': 20,
          'legend.handlelength': 2}
plot.rcParams.update(params)

Dann machen Sie die Handlung danach.

Es gibt eine Menge anderer rcParams, sie können auch in der matplotlibrc-Datei festgelegt werden.

Vermutlich können Sie es auch ändern, indem Sie eine matplotlib.font_manager.FontPropertiesInstanz übergeben, aber das weiß ich nicht. -> siehe Yanns Antwort.

Mauro
quelle
2
Odermatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric
2
das sollte legend.handlelengthstatt seinlegend.linewidth
Emmet B
Das Mitglied get_default_size () von FontManager gibt die Standardgröße zurück. Für mich ist es 12
guhur
1
Die Verwendung von "PyLab" wird nicht mehr empfohlen
Hagbard
51

mit import matplotlib.pyplot as plt

Methode 1: Geben Sie die Schriftgröße an, wenn Sie die Legende aufrufen (repetitiv).

plt.legend(fontsize=20) # using a size in points
plt.legend(fontsize="x-large") # using a named size

Mit dieser Methode können Sie die Schriftgröße für jede Legende bei der Erstellung festlegen (sodass Sie mehrere Legenden mit unterschiedlichen Schriftgrößen haben können). Sie müssen jedoch jedes Mal, wenn Sie eine Legende erstellen, alles manuell eingeben.

(Hinweis: @ Mathias711 hat die verfügbaren benannten Schriftgrößen in seiner Antwort aufgelistet.)

Methode 2: Geben Sie die Schriftgröße in rcParams an (praktisch)

plt.rc('legend',fontsize=20) # using a size in points
plt.rc('legend',fontsize='medium') # using a named size

Mit dieser Methode legen Sie die Standardschriftgröße für Legenden fest, und alle Legenden verwenden diese automatisch, sofern Sie mit Methode 1 nichts anderes angeben. Dies bedeutet, dass Sie die Schriftgröße für Legenden am Anfang Ihres Codes festlegen können, ohne sich um die Einstellung für jede einzelne Legende kümmern zu müssen .

Wenn Sie z. B. eine benannte Größe verwenden 'medium', wird der Legendentext mit dem globalen font.sizeIn skaliert rcParams. font.sizeVerwendung ändernplt.rc(font.size='medium')

binnev
quelle
1
Nur um Python-Anfänger (wie mich) zu informieren: Methode 1 funktioniert nur nach dem Erstellen eines Plots (nach einer plot () -Linie) und Methode 2 funktioniert nur vor dem Erstellen eines Plots. Vielen Dank. Ich stimme @Scott Gigante zu, dies sollte die Antwort sein!
Mateus da Silva Teixeira
42

Es gibt auch ein paar Namen Schriftgrößen , abgesehen von der Größe in Punkten:

xx-small
x-small
small
medium
large
x-large
xx-large

Verwendungszweck:

pyplot.legend(loc=2, fontsize = 'x-small')
Mathias711
quelle
19

Es gibt mehrere Einstellungen zum Anpassen der Legendengröße. Die beiden, die ich am nützlichsten finde, sind:

  • Etikettenabstand: Legt den Abstand zwischen Etiketteneinträgen in Vielfachen der Schriftgröße fest. legend(..., labelspacing=0.2)Reduziert beispielsweise bei einer 10-Punkt-Schriftart den Abstand zwischen Einträgen auf 2 Punkte. Die Standardeinstellung bei meiner Installation ist ungefähr 0,5.
  • prop: Hiermit können Sie die Schriftgröße usw. vollständig steuern. Sie können eine 8-Punkt-Schriftart mit festlegen legend(..., prop={'size':8}). Die Standardeinstellung bei meiner Installation ist ungefähr 14 Punkte.

Darüber hinaus ist die Legende Dokumentation listet eine Reihe anderer Polsterung und Abstandsparametern einschließlich: borderpad, handlelength, handletextpad, borderaxespad, und columnspacing. Diese folgen alle der gleichen Form wie Etikettenabstand und Fläche, auch in Vielfachen der Schriftgröße.

Diese Werte können auch als Standardeinstellungen für alle Abbildungen mithilfe der Datei matplotlibrc festgelegt werden .

Bryan P.
quelle
5

Bei meiner Installation ändert FontProperties nur die Textgröße, aber sie ist immer noch zu groß und zu weit auseinander. Ich habe in pyplot.rcParams: einen Parameter gefunden legend.labelspacing, der vermutlich auf einen Bruchteil der Schriftgröße eingestellt ist. Ich habe es mit geändert

pyplot.rcParams.update({'legend.labelspacing':0.25})

Ich bin nicht sicher, wie ich es für die Funktion pyplot.legend angeben soll - Übergabe

prop={'labelspacing':0.25}

oder

prop={'legend.labelspacing':0.25}

kommt mit einem Fehler zurück.

swint144
quelle
0

plot.legend (loc = 'unten rechts', decimal_places = 2, fontsize = '11', title = 'Hey there', title_fontsize = '20')

Adarsha Neupane
quelle