Miguel
Pregunta simple aquí: estoy tratando de obtener el tamaño de mi leyenda usando matplotlib.pyplot
sea más pequeño (es decir, el texto sea más pequeño). El código que estoy usando es algo como esto:
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)
yan
Puede establecer un tamaño de fuente individual para la leyenda ajustando el prop
palabra clave.
plot.legend(loc=2, prop={'size': 6})
Esto toma un diccionario de palabras clave correspondientes a matplotlib.font_manager.FontProperties
propiedades. Ver el 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.1para usar la palabra clave fontsize
.
usando 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 el momento de la creación (lo que le permite tener varias leyendas con diferentes tamaños de fuente). Sin embargo, tendrá que escribir todo manualmente cada vez que cree una leyenda.
(Nota: @Mathias711 enumeró los tamaños de fuente 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 leyenda predeterminado, y todas las leyendas lo usarán automáticamente a menos que especifique lo contrario usando el método 1. Esto significa que puede establecer el tamaño de fuente de su leyenda al comienzo de su código, y no preocuparse por configurarlo para cada leyenda individual. .
Si usa un tamaño con nombre, por ejemplo 'medium'
entonces el texto de la leyenda se escalará con el global font.size
en rcParams
. Cambiar font.size
utilizar plt.rc(font.size="medium")
-
Solo para informar a los principiantes de Python (como yo): el Método 1 solo funciona después de crear un diagrama (después de una línea plot()) y el Método 2 solo funciona antes de crear un diagrama. Gracias. Estoy de acuerdo con @Scott Gigante, ¡esta debería ser la respuesta!
– Mateus da Silva Teixeira
16 de agosto de 2019 a las 14:02
Mauro
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 un montón de otros rcParams, también se pueden configurar en el archivo matplotlibrc.
También presumiblemente puedes cambiarlo pasando un matplotlib.font_manager.FontProperties
ejemplo, pero esto no sé cómo hacerlo. –> ver la respuesta de Yann.
Mathias711
También hay algunos nombrados tamaños de fuenteaparte del tamaño en puntos:
xx-small
x-small
small
medium
large
x-large
xx-large
Uso:
pyplot.legend(loc=2, fontsize="x-small")
Alejo Bernardín
Ahora en 2021, con matplotlib 3.4.2 puede configurar sus fuentes de leyenda con
plt.legend(title="My Title", fontsize=10, title_fontsize=15)
donde fontsize
es el tamaño de letra de los elementos de la leyenda y title_fontsize
es el tamaño de fuente del título de la leyenda. Más información en documentación matplotlib
bryan p
Hay múltiples configuraciones para ajustar el tamaño de la leyenda. Los dos que encuentro más útiles son:
- labelspaceing: que establece el espacio entre las entradas de etiquetas 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 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 unos 14 puntos.
además, el documentación de la leyenda enumera una serie de otros parámetros de relleno y espaciado que incluyen: borderpad
, handlelength
, handletextpad
, borderaxespad
y columnspacing
. Todos estos siguen la misma forma que el espaciado de etiquetas y el área también en múltiplos de tamaño de fuente.
Estos valores también se pueden establecer como valores predeterminados para todas las cifras mediante el archivo matplotlibrc.
sjngm
En mi instalación, FontProperties solo cambia el tamaño del texto, pero sigue siendo demasiado grande y espaciado. Encontré un parámetro en pyplot.rcParams
: legend.labelspacing
, que 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}
regresa con un error.
Para obtener una respuesta actualizada, 2021, consulte stackoverflow.com/a/62669552/2612410
– Alejo Bernardín
7 de junio de 2021 a las 22:19