2011-08-19 35 views
190

Simple pregunta aquí: Estoy tratando de obtener el tamaño de mi leyenda usando matplotlib.pyplot a ser más pequeños (es decir, que el texto sea más pequeño). El código que estoy usando es algo como esto:¿Cómo cambiar el tamaño de la leyenda con matplotlib.pyplot

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) 

Respuesta

338

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

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

Esto toma un diccionario de palabras clave correspondientes a matplotlib.font_manager.FontProperties propiedades. Ver las documentation for legend:

argumentos de palabra 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.

+1

¿Podría decirme dónde puedo encontrar detalles sobre 'plot.rcParams.update'? – haccks

39

Esto debería hacer

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

Luego hacer la trama después.

Hay una tonelada de otros rcParams, también se pueden establecer en el archivo matplotlibrc.

Además de suponer que puede cambiarlo pasar una instancia matplotlib.font_manager.FontProperties pero esto no quiero saber cómo hacerlo. -> ver la respuesta de Yann.

+1

O 'matplotlib.rc ('leyenda', FontSize = 0,5, anchura de línea = 2)' – Eric

+1

que deben ser 'legend.handlelength' en lugar de' legend.linewidth' –

+0

El get_default_size miembro() de FontManager devuelve el tamaño predeterminado. Para mí es 12 –

4

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

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

No estoy seguro de cómo especificar que la función pyplot.legend - pasando

prop={'labelspacing':0.25} 

o

prop={'legend.labelspacing':0.25} 

vuelve con un error .

+6

Simplemente dando 'legend (labelspacing = 0.25)' funcionó para mí. – Adobe

12

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

  • separación de etiquetas: que establece el espaciado 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 entradas a 2 puntos. El valor predeterminado en mi instalación es de aproximadamente 0.5.
  • prop: que permite el control total del tamaño de fuente, etc. Puede establecer 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 legend documentation 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 etiquetado y el área también en múltiplos de tamaño de fuente.

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

26

Hay también algunos nombrado fontsizes, aparte del tamaño en puntos:

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

Uso:

pyplot.legend(loc=2, fontsize = 'x-small') 
16

usando import matplotlib.pyplot as plt

Método 1: especificar el tamaño de fuente al llamar leyenda (repetitiva)

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 varias leyendas con tamaños de letra diferentes). Sin embargo, tendrá que escribir todo de forma manual cada vez que cree una leyenda.

(Nota: @ Mathias711 enumeró los fontsizes nombrados disponibles en su respuesta)

Método 2: especificar 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 se establece la leyenda por defecto fontsize, y todas las leyendas lo usarán automáticamente, a menos que especifique lo contrario con 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 preocuparse por configurarlo para cada leyenda individual.

Si usa un tamaño con nombre, p. Ej. 'medium', el texto de la leyenda se escalará con el font.size global en rcParams. Para cambiar font.size uso plt.rc(font.size='medium')

Cuestiones relacionadas