wake-up-neo.com

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

Einfache Frage hier: Ich versuche, die Größe meiner Legende mit matplotlib.pyplot kleiner zu machen (d. H. 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)
264
mike

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

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

Dies erfordert ein Wörterbuch mit Schlüsselwörtern, die den Eigenschaften von matplotlib.font_manager.FontProperties entsprechen. Siehe Dokumentation zur Legende :

Keyword-Argumente:

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 kann auch das Schlüsselwort fontsize verwendet werden.

454
Yann

Das sollte reichen

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

Dann mache den Plot danach.

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

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

54
Mauro

Es gibt auch ein paar namens fontsizes , 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')
37
Mathias711

mit import matplotlib.pyplot as plt

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

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 (so dass 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 (bequem)

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 und sich nicht darum kümmern müssen, sie für jede einzelne Legende einzeln festzulegen .

Wenn Sie eine benannte Größe verwenden, z. 'medium', dann wird der Legendentext mit dem globalen font.size in rcParams skaliert. Zum Ändern von font.size verwenden Sie plt.rc(font.size='medium')

35
binnev

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

  • etikettenabstand: Legt den Abstand zwischen Etiketteneinträgen in Vielfachen der Schriftgröße fest. Beispiel: Bei einer 10-Punkt-Schrift verringert legend(..., labelspacing=0.2) den Abstand zwischen Einträgen auf 2 Punkte. Die Standardeinstellung für meine Installation ist ungefähr 0,5.
  • prop: Ermöglicht die vollständige Kontrolle über die Schriftgröße usw. Mit legend(..., prop={'size':8}) können Sie eine 8-Punkt-Schrift einstellen. Die Standardeinstellung für meine Installation beträgt ungefähr 14 Punkte.

Darüber hinaus enthält die Legendendokumentation eine Reihe weiterer Auffüll- und Abstandsparameter, darunter: borderpad, handlelength, handletextpad, borderaxespad und columnspacing. Diese folgen alle der gleichen Form wie der Etikettenabstand und der Fläche, auch in Vielfachen der Schriftgröße.

Diese Werte können auch mit matplotlibrc file als Standard für alle Zahlen festgelegt werden.

16
Bryan P

Bei meiner Installation ändert FontProperties nur die Textgröße, ist aber immer noch zu groß und zu weit auseinander. Ich habe in pyplot.rcParams: legend.labelspacing einen Parameter gefunden, der vermutlich auf einen Bruchteil der Schriftgröße festgelegt 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 festlegen soll - übergeben

prop={'labelspacing':0.25}

oder

prop={'legend.labelspacing':0.25}

kommt mit einem Fehler zurück.

5
swint144