Estoy creando una figura en Matplotlib como esta:
from matplotlib import pyplot as plt
fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')
Quiero especificar tamaños de fuente para el título de la figura y las etiquetas del eje. Necesito que los tres tengan diferentes tamaños de fuente, por lo que establecer un tamaño de fuente global ( mpl.rcParams['font.size']=x
) no es lo que quiero. ¿Cómo configuro los tamaños de fuente para el título de la figura y las etiquetas del eje individualmente?
python
matplotlib
vasek1
fuente
fuente
mpl.rcParams['font.size'] = 20
e intenté cambiar los valores a 10 y 14. Primero descubrí que recibía errores a menos que cambiarampl
aplt
. Ese cambio borró el error, pero luego la línea de código no tuvo efecto en mis títulos o etiquetas. ¿Seguro que esta sintaxis es correcta?mpl
comando?Respuestas:
Funciones relacionadas con el texto como
label
,title
, etc. aceptan parámetros mismos comomatplotlib.text.Text
. Para el tamaño de fuente que puede usarsize/fontsize
:Para ajustes
title
ylabel
tamaños globales ,mpl.rcParams
contieneaxes.titlesize
yaxes.labelsize
. (De la página):(Hasta donde puedo ver, no hay forma de establecer
x
yy
etiquetar los tamaños por separado).Y veo que eso
axes.titlesize
no afectasuptitle
. Supongo que debes configurarlo manualmente.fuente
mpl.rcParams
. He editado mi respuesta.plt.rcParams.update({'axes.titlesize': 'small'})
rcParams
enlace, usefigure.titlesize
además deaxes.titlesize
.python -c 'import matplotlib as mpl; print(mpl.__version__); print("figure.titlesize" in mpl.rcParams.keys())'
. El resultado es1.5.1
,True
. 1) ¿Qué versión de matplotlib está utilizando? ¿Qué versión de Python? 2) ¿Podría ser un error donde, por alguna razón, aceptastr
pero nounicode
en Py2?También puede hacer esto globalmente a través de un diccionario rcParams:
fuente
'x-large'
?pylab.rcParams.keys()
para ver la lista completa de parámetros.ax.set_title('some title', fontsize=15)
,ax.set_xlabel('some xlabel', fontsize=12)
? Parece quercParams
solo acepta cadenas.'axes.labelsize': 32,
Si está más acostumbrado a usar
ax
objetos para trazar, puede encontrar elax.xaxis.label.set_size()
más fácil de recordar, o al menos más fácil de encontrar usando la pestaña en un terminal ipython. Parece necesitar una operación de redibujo después de ver el efecto. Por ejemplo:No conozco una forma similar de establecer el tamaño del título después de crearlo.
fuente
fig.suptitle('test title', fontsize = 20)
parece funcionar.ax.set_xlabel('xlabel', fontsize = 20)' also works, in which case we can do away with
ax.xaxis.label.set_size (20) `.ax.xaxis.label.set_size()
cuando estoy trabajando interactivamente con un diagrama de ipython y quiero hacer una evaluación visual rápida de una variedad de tamaños de fuente.plt.xlabel()
vs.ax.set_xlabel()
como usted dice), son equivalentes, con la advertencia de que lasplt.*
funciones funcionan en el eje / figura actual . Por lo tanto, si configura una figura con varios ejes, probablemente quiera usar llamadas explícitasax1.set_xlabel()
para evitar confusiones.Para modificar solo la fuente del título (y no la fuente del eje) utilicé esto:
El fontdict acepta todos los kwargs de matplotlib.text.Text .
fuente
La configuración global de los tamaños de fuente a través de
rcParams
debe hacerse conLos valores predeterminados se pueden restaurar utilizando
También puede hacer esto creando una hoja de estilo en el
stylelib
directorio bajo el directorio de configuración matplotlib (puede obtener su directorio de configuraciónmatplotlib.get_configdir()
). El formato de la hoja de estilo esSi tiene una hoja de estilo en
/path/to/mpl_configdir/stylelib/mystyle.mplstyle
, puede usarla a través deTambién puede crear (o modificar) un archivo matplotlibrc que comparta el formato
Según el archivo matplotlibrc que modifique, estos cambios se usarán solo para el directorio de trabajo actual, para todos los directorios de trabajo que no tengan un archivo matplotlibrc o para todos los directorios de trabajo que no tengan un archivo matplotlibrc y donde ningún otro archivo matplotlibrc tenga ha sido especificado Ver esta sección de la página de personalización de matplotlib para obtener más detalles.
Puede obtener una lista completa de las
rcParams
clavesplt.rcParams.keys()
, pero para ajustar los tamaños de fuente que tiene (cursiva citada desde aquí )axes.labelsize
- Tamaño de fuente de las etiquetas x e yaxes.titlesize
- Tamaño de fuente del título de los ejesfigure.titlesize
- Tamaño del título de la figura (Figure.suptitle()
)xtick.labelsize
- Tamaño de fuente de las etiquetas de marcaytick.labelsize
- Tamaño de fuente de las etiquetas de marcalegend.fontsize
- Fontsize para leyendas (plt.legend()
,fig.legend()
)legend.title_fontsize
- Tamaño de fuente para títulos de leyenda, seNone
establece en los mismos que los ejes predeterminados. Vea esta respuesta para el ejemplo de uso.todos los cuales aceptan tamaños de cadena
{'xx-small', 'x-small', 'smaller', 'small', 'medium', 'large', 'larger', 'x-large', 'xxlarge'}
o unafloat
pulgpt
. Los tamaños de cadena se definen en relación con el tamaño de fuente predeterminado que se especifica mediantefont.size
- el tamaño de fuente predeterminado para el texto, dado en pts. 10 pt es el valor estándarAdemás, el peso se puede especificar (aunque solo para el valor predeterminado que aparece) por
font.weight
- El peso predeterminado de la fuente utilizada portext.Text
. Acepta{100, 200, 300, 400, 500, 600, 700, 800, 900}
o'normal'
(400),'bold'
(700)'lighter'
, y'bolder'
(en relación con el peso actual ).fuente
Una solución alternativa para cambiar el tamaño de fuente es cambiar el relleno. Cuando Python guarda su PNG, puede cambiar el diseño utilizando el cuadro de diálogo que se abre. El espacio entre los ejes, el relleno, si lo desea, puede modificarse en esta etapa.
fuente
Colocar
right_ax
antesset_ylabel()
ax.right_ax.set_ylabel('AB scale')
fuente
7 (mejor solución)
6 (solución ligeramente peor)
fuente