2011-06-17 29 views
169

En una figura de matplotlib, ¿cómo puedo hacer que el tamaño de fuente para las etiquetas de tilde sea más pequeño que ax1.set_xticklabels()?Matplotlib make tick labels tamaño de fuente más pequeño

Además, ¿cómo se puede rotar de horizontal a vertical?

+0

Gracias por hacer esta pregunta, estoy tratando de resolver este problema ahora mismo. No soy muy testarudo aquí, pero parece que los votantes piensan que la mejor respuesta no es la aceptada. ¿Qué piensas? –

+0

¿He leído correctamente que hay al menos 5 formas diferentes de cambiar el tamaño de fuente en matplotlib? : D – famargar

Respuesta

71

Tenga en cuenta que las versiones más recientes de MPL tienen un atajo para esta tarea. Se muestra un ejemplo en la otra respuesta a esta pregunta: https://stackoverflow.com/a/11386056/42346

El siguiente código es para fines ilustrativos y no necesariamente debe ser optimizado.

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() 

enter image description here

+53

Solo como un lado: en lugar de recorrer los objetos de la etiqueta tick, puede usar 'plt.setp'. (Además, eche un vistazo a 'ax.tick_params') Por ejemplo, puede hacer' plt.setp (ax.get_xticklabels(), rotation = 'vertical', fontsize = 14) '. Además, los objetos de ejes tienen un método 'ax.is_last_row()' que puede ser útil en casos como su ejemplo. En lugar de 'if i! = Len ...', puedes hacer 'if not ax.is_last_row()'. (Por qué es un método, no tengo ni idea ... Matplotlib odia las propiedades, al parecer!) –

+0

@Joe: esta es la primera vez que escucho sobre 'is_last_row()', ¡gracias! He usado 'plt.setp' en el pasado, y no estaba necesariamente seguro de que representara una forma más canónica de personalizar etiquetas de ticks. Has eliminado esa duda, gracias. En términos más generales: sus respuestas, especialmente en la etiqueta 'matplotlib', a menudo me dejan asombrado. Mantener el buen trabajo. – bernie

+0

¡Gracias! Aprecio las amables palabras, especialmente de ti! Canonical es muy relativo, en este caso. 'plt.setp' es un" matlab-ismo ", y un loop explícito es probablemente mucho más pitónico. Siendo un convertido matlab, yo mismo, 'setp' se siente natural, pero a cada uno lo suyo. Cualquiera de los dos es bastante legible, i.m.o. –

304

Hay una manera más simple en realidad. Acabo de encontrar:

import matplotlib.pyplot as plt 
# We prepare the plot 
fig = plt.figure(1) 
# We define a fake subplot that is in fact only the plot. 
plot = fig.add_subplot(111) 

# We change the fontsize of minor ticks label 
plot.tick_params(axis='both', which='major', labelsize=10) 
plot.tick_params(axis='both', which='minor', labelsize=8) 

Esto sólo responde al tamaño de label parte de su pregunta, sin embargo.

13

También puede cambiar los parámetros de visualización de la etiqueta como tamaño de fuente con una línea como la siguiente:

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()] 
37

Alternativamente, usted puede hacer:

import matplotlib as mpl 
label_size = 8 
mpl.rcParams['xtick.labelsize'] = label_size 
15

En las versiones actuales de Matplotlib, puede hacerlo axis.set_xticklabels(labels, fontsize='small') .

10

Para fuente más pequeña, utilizo

ax1.set_xticklabels (xticklabels, tamaño de fuente = 7)

y funciona!

52

Para especificar tanto el tamaño de fuente y rotación al mismo tiempo, intente esto:

plt.xticks(fontsize=14, rotation=90) 
+3

Esta es la mejor y más simple respuesta. – user1271772

4

plt.tick_params (eje = 'ambos', que es = 'menor', labelsize = 12)

+0

Esta es la única respuesta que funciona si desea cambiar el tamaño de fuente sin establecer nuevas etiquetas. –

Cuestiones relacionadas