2010-01-02 131 views
17

我想用Pylab绘制一个混淆矩阵。沿水平轴的类标签很长,所以我想绘制它们垂直旋转。不过,我也想将它们绘制在轴的上方,而不是下方。顶部垂直xtick标签,而不是底部

此命令可以在底部绘制垂直标签:

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

和该命令可以绘制在顶部水平标签不旋转:

pylab.matshow(confusion_matrix) 

,但我找不到任何可以做到这些。以下命令不起作用。

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

你可以建议一种方法来绘制一个混乱矩阵xticks在垂直轴旋转的顶部?谢谢。

编辑

谢谢你,马克,你的帮助。它通过更密切地检查标记属性让我走上了正确的轨道。与你的答案和我想要的答案唯一的区别是将该想法应用于AxesImage,而不是情节。经过调查,这里是答案:

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

对于那些阅读...不要忘记show()!我忘记了我需要刷新这个数字。见下面的输出。

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

回答

10

如果我理解正确的话,这将让你关闭。您可能必须用空格将您的标签“填充”出来,以将它们从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') 

编辑回应置评

如果你希望他们在顶部x轴旋转垂直,试试这个:

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

感谢您的及时回复。我不清楚。我试图在整个图上绘制标签。例如,pylab.matshow()这样做,但标签不能旋转。旋转它们会非常好,因为它使得所有内容更具可读性,尤其是当混淆矩阵很大时。 – 2010-01-02 23:28:29

+0

@Steve,请参阅上面的编辑。 – Mark 2010-01-03 00:22:16

1

读您的文章,并通过自己的努力,我发现一个非常简单的方法来设置坐标轴上的刻度: pylab.gca().tick_top()

干杯!

+0

感谢您的评论。但是,'tick_top'只会将轴的底部的滴答移到顶部。这也是'matshow'所做的。它不会垂直旋转它们。不过,'tick_top'很好理解! – 2011-09-23 05:41:12

+1

当你不使用matshow时特别有趣;) – PierreE 2012-01-13 10:22:06

相关问题