2011-11-18 10 views
8

Tengo un diagrama en matplotlib, y mi problema es que debido a que x ax tiene cadenas como valores cuando la ventana de trazado se redimensiona, se superponen y no se pueden leer con claridad.¿Cómo personalizo automáticamente el texto en matplotlib python?

Algo similar ocurre con la leyenda de que no se cambia el tamaño si se cambia el tamaño de las ventanas.

¿Hay alguna configuración para eso?

Respuesta

11

No exactamente. (Echa un vistazo a the new matplotlib.pyplot.tight_layout() function para algo vagamente similar, aunque ...)

Sin embargo, el truco habitual con las etiquetas largas de x-tick es simplemente rotarlas.

Por ejemplo, si tenemos algo con xticklabels superpuestas:

import matplotlib.pyplot as plt 

plt.plot(range(10)) 
labels = [15 * repr(i) for i in range(10)] 
plt.xticks(range(10), labels) 
plt.show() 

enter image description here

Podemos rotar ellos para hacerlos más fáciles de leer:. (La clave es la rotation=30 La llamada a plt.tight_layout() solo ajusta el margen inferior de la trama de manera que las etiquetas no van por el borde inferior.)

import matplotlib.pyplot as plt 

plt.plot(range(10)) 
labels = [10 * repr(i) for i in range(10)] 
plt.xticks(range(10), labels, rotation=30) 
plt.tight_layout() 
plt.show() 

enter image description here

De forma predeterminada, las etiquetas de tilde se centran en el tic. Para las garrapatas giradas, a menudo tiene más sentido que el borde izquierdo o derecho de la etiqueta comience en el tic.

Por ejemplo, algo como esto (lado derecho, rotación positiva):

import matplotlib.pyplot as plt 

plt.plot(range(10)) 
labels = [10 * repr(i) for i in range(10)] 
plt.xticks(range(10), labels, rotation=30, ha='right') 
plt.tight_layout() 
plt.show() 

enter image description here

O este (lado izquierdo, rotación negativa):

import matplotlib.pyplot as plt 

plt.plot(range(10)) 
labels = [10 * repr(i) for i in range(10)] 
plt.xticks(range(10), labels, rotation=-30, ha='left') 
plt.tight_layout() 
plt.show() 

enter image description here

+0

Joe, ¿qué pasa si no quiero ningún número Y recupero el espacio, para que el lienzo producido no tiene márgenes, solo el cuadrado (idealmente solo el gráfico, sin líneas)? Intento mostrarlo en un contenedor gtk, y lo necesito de forma precisa. 'a.axis ('off')' simplemente elimina los números, y 'a.margins (0, tight = True)' parece inoperante ... ¡Ayuda! – yPhil

+1

@xaccrocheur - 'ax.margins' controla cómo funciona el autoescalado de los límites de datos, no los márgenes" exteriores "de la gráfica. Si desea controlar la cantidad de lienzo que ocupan los ejes, o bien 1) haga manualmente un eje que ocupe toda la figura utilizando 'ax = fig.add_axes ([0, 0, 1, 1])', o 2) use 'subplots_adjust' para cambiar los márgenes" externos "de sus subparcelas (p. Ej.' Fig.subplots_adjust (0, 0, 1, 1) ') –

Cuestiones relacionadas