2010-01-02 5 views
17

Voglio tracciare una matrice di confusione usando Pylab. Le etichette delle classi lungo l'asse orizzontale sono lunghe, quindi voglio tracciarle ruotate verticalmente. Tuttavia, voglio anche tracciarli sopra l'asse, non sotto.Etichette xick verticali in alto, non in basso

Questo comando può tracciare etichette verticali sulla parte inferiore:

pylab.imshow(confusion_matrix) 
pylab.xticks(..., rotation='vertical') 

e questo comando può tracciare etichette orizzontali in alto senza rotazione:

pylab.matshow(confusion_matrix) 

ma non riesco a trovare nulla che fa entrambe le cose. Il seguente comando non funziona.

pylab.matshow(confusion_matrix) 
pylab.xticks(..., rotation='vertical') 

si può suggerire un modo per tracciare una matrice confusione con xticks in cima dell'asse con rotazione verticale? Grazie.

EDIT

Grazie, Marco, per il vostro aiuto. Mi ha messo sulla strada giusta ispezionando le proprietà delle zecche più da vicino. L'unica differenza con la tua risposta e la mia risposta desiderata è l'applicazione di quell'idea ad un'AxesImage, non una trama. Dopo l'indagine, ecco la risposta:

im = pylab.matshow(confusion_matrix) 
for label in im.axes.xaxis.get_ticklabels(): 
    label.set_rotation(90) 
im.figure.show() 

Per coloro che leggono ... non dimenticare di show()! Ho dimenticato che avevo bisogno di aggiornare la figura. Vedi l'output qui sotto.

Confusion matrix with vertical labels. http://up.stevetjoa.com/rotate_ticklabels.png

risposta

10

Se ho capito bene, questo otterrà si chiude. Potrebbe essere necessario "tamponare" le etichette con spazi per spostarle dalla linea xaxis.

from matplotlib import pylab 
pylab.plot([0, 6], [0, 6]) 
pylab.xticks([1,2,3,4,5,6],('one','two','three','four','five','six'),rotation='vertical',verticalalignment='bottom') 

EDIT IN RISPOSTA A PRESENTARE OSSERVAZIONI

Se si desidera loro ruotati verticale sulla parte superiore ascisse, provate questo:

pylab.plot([0, 6], [0, 6]) 
pylab.xticks([1,2,3,4,5,6],('one','two','three','four','five','six')) 
for tick in pylab.gca().xaxis.iter_ticks(): 
    tick[0].label2On = True 
    tick[0].label1On = False 
    tick[0].label2.set_rotation('vertical') 
+0

Grazie per la vostra pronta risposta. Non ero chiaro Sto cercando di tracciare le etichette sopra l'intera figura. Ad esempio, pylab.matshow() esegue questa operazione, ma le etichette non possono essere ruotate. Sarebbe davvero bello ruotarli, perché rende tutto più leggibile, specialmente quando la matrice di confusione è grande. –

+0

@Steve, vedere le modifiche sopra. – Mark

1

letto il tuo post, e cercando da me, Ho trovato un modo molto semplice di impostare le zecche sopra gli assi: pylab.gca().tick_top()

Cheers !

+0

Grazie per il tuo commento. Tuttavia, 'tick_top' sposta solo le zecche dalla parte inferiore dell'asse verso l'alto. Questo è anche ciò che fa "matshow". Non li ruota verticalmente. Tuttavia, 'tick_top' è utile! –

+1

È particolarmente interessante quando non usi matshow;) – PierreE