Cómo cambiar el tamaño de la leyenda con matplotlib.pyplot

324

Pregunta simple aquí: estoy tratando de hacer que el tamaño de mi leyenda matplotlib.pyplotsea ​​más pequeño (es decir, que el texto sea más pequeño). El código que estoy usando va más o menos así:

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)
Miguel
fuente

Respuestas:

543

Puede establecer un tamaño de fuente individual para la leyenda ajustando la proppalabra clave.

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

Esto toma un diccionario de palabras clave correspondientes a las matplotlib.font_manager.FontPropertiespropiedades. Vea la documentación para la leyenda :

Argumentos de palabras clave:

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.

También es posible, a partir de la versión 1.2.1 , utilizar la palabra clave fontsize.

Yann
fuente
1
¿Podría decirme dónde puedo encontrar detalles plot.rcParams.update?
piratea el
64

Esto debería hacer

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

Luego haz la trama después.

Hay muchos otros rcParams, también se pueden configurar en el archivo matplotlibrc.

También presumiblemente puede cambiarlo pasando una matplotlib.font_manager.FontPropertiesinstancia, pero esto no sé cómo hacerlo. -> ver la respuesta de Yann.

Mauro
fuente
2
Omatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric
2
eso debería ser en legend.handlelengthlugar delegend.linewidth
Emmet B
El miembro get_default_size () de FontManager devuelve el tamaño predeterminado. Para mí son las 12
guhur
1
El uso de "PyLab" ya no se recomienda: matplotlib.org/faq/…
Hagbard
51

utilizando import matplotlib.pyplot as plt

Método 1: especifique el tamaño de fuente al llamar a la leyenda (repetitivo)

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

Con este método, puede establecer el tamaño de fuente para cada leyenda en la creación (lo que le permite tener múltiples leyendas con diferentes tamaños de fuente). Sin embargo, deberá escribir todo manualmente cada vez que cree una leyenda.

(Nota: @ Mathias711 enumeró los tamaños de letra con nombre disponibles en su respuesta)

Método 2: especifique el tamaño de fuente en rcParams (conveniente)

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

Con este método, establece el tamaño de fuente de la leyenda predeterminado, y todas las leyendas lo usarán automáticamente a menos que especifique lo contrario utilizando el método 1. Esto significa que puede establecer el tamaño de fuente de la leyenda al comienzo de su código, y no se preocupe por configurarlo para cada leyenda individual .

Si usa un tamaño con nombre 'medium', por ejemplo , el texto de la leyenda se escalará con el global font.sizeen rcParams. Para cambiar de font.sizeusoplt.rc(font.size='medium')

binnev
fuente
1
Solo para informar a los principiantes de Python (como yo): el Método 1 solo funciona después de crear un gráfico (después de una línea de gráfico) y el Método 2 solo funciona antes de crear un gráfico. Gracias. Estoy de acuerdo con @Scott Gigante, ¡esta debería ser la respuesta!
Mateus da Silva Teixeira
42

También hay algunos tamaños de fuente con nombre , además del tamaño en puntos:

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

Uso:

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

Existen múltiples configuraciones para ajustar el tamaño de la leyenda. Los dos que encuentro más útiles son:

  • espacio de etiquetas: que establece el espacio entre las entradas de etiqueta en múltiplos del tamaño de fuente. Por ejemplo, con una fuente de 10 puntos, legend(..., labelspacing=0.2)reducirá el espacio entre las entradas a 2 puntos. El valor predeterminado en mi instalación es de aproximadamente 0.5.
  • prop: que permite un control total del tamaño de la fuente, etc. Puede configurar una fuente de 8 puntos usando legend(..., prop={'size':8}). El valor predeterminado en mi instalación es de aproximadamente 14 puntos.

Además, los documentación leyenda listas de una serie de otros parámetros de relleno y espaciado entre ellos: borderpad, handlelength, handletextpad, borderaxespad, y columnspacing. Todos estos siguen la misma forma que el espacio de etiquetas y el área también en múltiplos de tamaño de fuente.

Estos valores también se pueden establecer como los valores predeterminados para todas las figuras que usan el archivo matplotlibrc .

Bryan P
fuente
5

En mi instalación, FontProperties solo cambia el tamaño del texto, pero aún es demasiado grande y está espaciado. Encontré un parámetro en pyplot.rcParams:, legend.labelspacingque supongo que está configurado en una fracción del tamaño de fuente. Lo he cambiado con

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

No estoy seguro de cómo especificarlo en la función pyplot.legend - pasando

prop={'labelspacing':0.25}

o

prop={'legend.labelspacing':0.25}

vuelve con un error

swint144
fuente
0

plot.legend (loc = 'inferior derecha', decimal_places = 2, fontsize = '11', title = 'Hola', title_fontsize = '20')

Adarsha Neupane
fuente