En una figura matplotlib, ¿cómo puedo hacer que el tamaño de fuente para las etiquetas de marca sea ax1.set_xticklabels()
más pequeño?
Además, ¿cómo se puede rotar de horizontal a vertical?
En una figura matplotlib, ¿cómo puedo hacer que el tamaño de fuente para las etiquetas de marca sea ax1.set_xticklabels()
más pequeño?
Además, ¿cómo se puede rotar de horizontal a vertical?
Respuestas:
Tenga en cuenta que las versiones más nuevas de MPL tienen un acceso directo para esta tarea. Se muestra un ejemplo en la otra respuesta a esta pregunta: https://stackoverflow.com/a/11386056/42346
El siguiente código tiene fines ilustrativos y no necesariamente puede optimizarse.
import matplotlib.pyplot as plt
import numpy as np
def xticklabels_example():
fig = plt.figure()
x = np.arange(20)
y1 = np.cos(x)
y2 = (x**2)
y3 = (x**3)
yn = (y1,y2,y3)
COLORS = ('b','g','k')
for i,y in enumerate(yn):
ax = fig.add_subplot(len(yn),1,i+1)
ax.plot(x, y, ls='solid', color=COLORS[i])
if i != len(yn) - 1:
# all but last
ax.set_xticklabels( () )
else:
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(14)
# specify integer or one of preset strings, e.g.
#tick.label.set_fontsize('x-small')
tick.label.set_rotation('vertical')
fig.suptitle('Matplotlib xticklabels Example')
plt.show()
if __name__ == '__main__':
xticklabels_example()
plt.setp
. (Además, eche un vistazo a ax.tick_params
) Por ejemplo, simplemente puede hacerlo plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. Además, los objetos axes tienen un ax.is_last_row()
método que puede ser útil en casos como su ejemplo. En lugar de if i != len...
, puedes hacerlo if not ax.is_last_row()
. (¿Por qué es un método, no tengo idea ... Matplotlib odia las propiedades, aparentemente!)
is_last_row()
, ¡gracias! Lo he usado plt.setp
en el pasado, y no estaba necesariamente seguro de que representara una forma más canónica de personalizar las etiquetas de marca. Has eliminado esa duda, gracias. En términos más generales: sus respuestas, especialmente en la matplotlib
etiqueta, con frecuencia me dejan asombrado. Mantener el buen trabajo.
plt.setp
es un "matlab-ism", y un bucle explícito es probablemente mucho más pitónico. Ser un converso matlab, me setp
siento natural, pero para cada uno lo suyo. Cualquiera de los dos es bastante legible, IMO
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
noget_major_ticks
Hay una manera más simple en realidad. Acabo de encontrar:
import matplotlib.pyplot as plt
# We prepare the plot
fig, ax = plt.subplots()
# We change the fontsize of minor ticks label
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)
Sin label
embargo, esto solo responde al tamaño de parte de su pregunta.
axis = 'x'
o axis = 'y'
para modificar solo uno de los ejes
Para especificar el tamaño de fuente y la rotación al mismo tiempo, intente esto:
plt.xticks(fontsize=14, rotation=90)
Alternativamente, solo puedes hacer:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
Otra alternativa
Tengo dos parcelas una al lado de la otra y me gustaría ajustar las etiquetas de marca por separado.
Las soluciones anteriores estaban cerca, sin embargo, no me estaban funcionando. Encontré mi solución en esta página matplotlib .
ax.xaxis.set_tick_params(labelsize=20)
Esto hizo el truco y fue directo al grano. Para mi caso de uso, era la trama a la derecha la que necesitaba ser ajustada. Para el diagrama de la izquierda, ya que estaba creando nuevas etiquetas de marca, pude ajustar la fuente en el mismo proceso que al configurar las etiquetas.
es decir
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
así que usé para la trama correcta,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Una sutileza menor ... Lo sé ... pero espero que esto ayude a alguien :)
Puntos de bonificación si alguien sabe cómo ajustar el tamaño de fuente de la etiqueta de orden de magnitud.
También puede cambiar los parámetros de visualización de etiquetas como tamaño de fuente con una línea como esta:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
Para una fuente más pequeña, uso
ax1.set_xticklabels(xticklabels, fontsize=7)
¡y funciona!