2011-11-18 11 views
8

Ho una trama in matplotlib, e il mio problema è che poiché l'x ax ha stringhe come valori quando la finestra trama viene ridimensionata si sovrappongono e non possono essere lette chiaramente.Come si automatizza il testo in matplotlib python?

Una cosa simile accade con la legenda che non viene ridimensionata se le finestre vengono ridimensionate.

Esiste un'impostazione?

risposta

11

Non esattamente. (Date un'occhiata a the new matplotlib.pyplot.tight_layout() function per qualcosa di vagamente simile, però ...)

Tuttavia, il solito trucco con le etichette lunghe x-tick è solo per ruotarle.

Per esempio, se abbiamo qualcosa con xticklabels sovrapposti:

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

Possiamo ruotare loro per rendere più agevole la lettura:. (La chiave è la rotation=30 La chiamata a plt.tight_layout() solo regola il margine inferiore della trama in modo che le etichette non vanno fuori dal bordo inferiore.)

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

Per impostazione predefinita, le etichette di graduazione sono centrate sul segno di spunta. Per le zecche ruotate ha spesso più senso avere il bordo sinistro o destro dell'etichetta che inizia al segno di spunta.

Per esempio, qualcosa di simile (lato destro, rotazione 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 questo (lato sinistro, rotazione 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, cosa succede se non voglio alcun numero E riconquistare lo spazio, in modo che la tela prodotta non ha margini, solo il quadrato (idealmente solo il grafico, nessuna linea)? Sto provando a visualizzarlo in un contenitore gtk, e ne ho bisogno esattamente posizionato. 'a.axis ('off')' rimuove solo i numeri, e 'a.margins (0, tight = True)' sembra inoperante ... Aiuto! – yPhil

+1

@xaccrocheur - 'ax.margins' controlla la modalità di scalabilità automatica dei limiti di dati, non i margini" esterni "del grafico. Se vuoi controllare quanta parte della tela occupata dagli assi, 1) crea manualmente un asse che occupa l'intera figura usando 'ax = fig.add_axes ([0, 0, 1, 1])', oppure 2) usa 'subplots_adjust' per cambiare i margini" esterni "delle tue sottotramme (es.' Fig.subplots_adjust (0, 0, 1, 1) ') –

Problemi correlati