22

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

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

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()

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

带有垂直标签的混淆矩阵。http://up.stevetjoa.com/rotate_ticklabels.png

4

2 回答 2

12

如果我理解正确,这将使您接近。您可能必须用空格“填充”标签以将它们移出 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')
于 2010-01-02T21:53:07.000 回答
1

阅读您的帖子并自己尝试,我发现了一种非常简单的方法,可以将刻度设置在轴的顶部: pylab.gca().tick_top()

干杯!

于 2011-09-22T17:51:25.200 回答