2010-01-02 12 views
17

Ich möchte eine Verwechslungsmatrix mit Pylab darstellen. Die Klassenbezeichnungen entlang der horizontalen Achse sind lang, also möchte ich sie vertikal gedreht darstellen. Ich möchte sie aber auch auf der Achse auftragen, nicht darunter.Vertikale Xtick-Etiketten oben, nicht unten

Dieser Befehl kann vertikale Etiketten auf der Unterseite des Grundstückes:

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

und dieser Befehl horizontal Etiketten auf der Oberseite ohne Drehung zeichnen kann:

pylab.matshow(confusion_matrix) 

aber ich kann nichts finden, dass sowohl der Fall ist. Der folgende Befehl funktioniert nicht.

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

Können Sie eine Möglichkeit vorschlagen, eine Verwechslungsmatrix mit Xticks oben auf der Achse mit vertikaler Drehung zu zeichnen? Vielen Dank.

EDIT

Danke, Mark, für Ihre Hilfe. Es hat mich auf den richtigen Weg gebracht, indem ich die Eigenschaften der Zecke genauer untersuchte. Der einzige Unterschied zu Ihrer Antwort und meiner gewünschten Antwort besteht darin, diese Idee auf ein AxesImage anzuwenden, nicht auf eine Handlung. Nach der Untersuchung, hier ist die Antwort:

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

Zu denen lesen ... nicht vergessen, Show()! Ich vergaß, dass ich die Figur auffrischen musste. Siehe Ausgabe unten.

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

Antwort

10

Wenn ich Sie richtig verstehe, wird dies erhalten Sie schließen. Möglicherweise müssen Sie Ihre Beschriftungen mit Leerzeichen auffüllen, um sie von der X-Achse zu entfernen.

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 REAKTION AUF KOMMENTAR

Wenn Sie wollen, dass sie senkrecht auf der oberen X-Achse gedreht wird, dies versuchen:

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

Vielen Dank für Ihre schnelle Antwort. Ich war unklar. Ich versuche, die Etiketten über die gesamte Figur zu zeichnen. Zum Beispiel, pylab.matshow() tut dies, aber die Etiketten können nicht gedreht werden. Es wäre wirklich schön, sie zu drehen, weil sie alles lesbarer macht, besonders wenn die Konfusionsmatrix groß ist. –

+0

@Steve, siehe oben. – Mark

1

Lektüre Ihrer Post, und von mir versucht, Ich fand eine sehr einfache Möglichkeit, die Ticks oben auf den Achsen zu setzen: pylab.gca().tick_top()

Prost !

+0

Vielen Dank für Ihren Kommentar. 'Tick_top' bewegt jedoch nur Ticks vom unteren Ende der Achse nach oben. Dies ist auch, was 'matshow' tut. Sie werden nicht vertikal gedreht. Trotzdem ist 'tick_top' gut zu wissen! –

+1

Es ist besonders interessant, wenn Sie matshow nicht verwenden;) – PierreE