2010-01-02 13 views
17

Quiero trazar una matriz de confusión con Pylab. Las etiquetas de clase a lo largo del eje horizontal son largas, por lo que quiero trazarlas giradas verticalmente. Sin embargo, también quiero trazarlos en la parte superior del eje, no debajo.Etiquetas verticales de xtick en la parte superior, no en la parte inferior

Este comando puede trazar etiquetas verticales en la parte inferior:

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

y este comando puede trazar etiquetas horizontales en la parte superior sin rotación:

pylab.matshow(confusion_matrix) 

pero no puedo encontrar nada de lo que hace ambas cosas. El siguiente comando no funciona.

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

¿Puede sugerir una forma de trazar una matriz de confusión con xticks en la parte superior del eje con rotación vertical? Gracias.

EDITAR

Gracias, Mark, por su ayuda. Me puso en el camino correcto al inspeccionar las propiedades de la marca más de cerca. La única diferencia con su respuesta y mi respuesta deseada es aplicar esa idea a AxesImage, no a una trama. Después de la investigación, aquí está la respuesta:

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

Para los que leen ... no se olvide de mostrar()! Olvidé que necesitaba actualizar la figura. Ver salida a continuación.

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

Respuesta

10

Si he entendido bien, esto le ayudará a cerrar. Es posible que tenga que "rellenar" sus etiquetas con espacios para moverlas fuera de la línea 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') 

EDITAR En respuesta al comentario

Si usted quiere que giran vertical en el eje x superior, intente esto:

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

Gracias por su pronta respuesta. No estaba claro Estoy tratando de trazar las etiquetas en la parte superior de la figura completa. Por ejemplo, pylab.matshow() hace esto, pero las etiquetas no se pueden rotar. Sería realmente bueno rotarlos, porque hace todo más legible, especialmente cuando la matriz de confusión es grande. –

+0

@Steve, mira las ediciones anteriores. – Mark

1

La lectura de su puesto, y tratando por mí mismo, Encontré una manera muy simple de configurar las marcas en la parte superior de los ejes: pylab.gca().tick_top()

Saludos !

+0

Gracias por su comentario. Sin embargo, 'tick_top' solo mueve tics desde la parte inferior del eje a la parte superior. Esto también es lo que hace 'matshow'. No los gira verticalmente. Sin embargo, 'tick_top' es bueno saberlo! –

+1

Es especialmente interesante cuando no usas matshow;) – PierreE

Cuestiones relacionadas