如何在子图中显示所有的标签。我有12个标签,我必须绘制一个混淆矩阵。但是只有6个标签是可见的

问题描述 投票:1回答:1

我想绘制12个数据的混淆矩阵,所以我做了12个标签来绘制混淆矩阵,12个数据的绘图是正确的,但是x标签和y标签只显示了一半。

我使用了这个代码段--。

import matplotlib.pyplot as plt

labels = ['1','2','3','4','5','6','7','8','9','10','11','12']
cm = confusion_matrix(actualList, predictList, labels)
print(cm)
fig = plt.figure()
fig.set_figheight(10)
fig.set_figwidth(10)
ax = fig.add_subplot()
cax = ax.matshow(cm)
plt.title('Confusion matrix of the classifier',pad=-570)
fig.colorbar(cax)
ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
plt.setp(ax.get_xticklabels(), rotation=30, ha="left",
         rotation_mode="anchor")
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()

得到的结果是这样的

enter image description here

python matplotlib data-visualization subplot confusion-matrix
1个回答
1
投票

当你有多个类别时,matplotlib会给坐标轴贴上不正确的标签。为了解决这个问题,你可以从matplotlib.ticker中导入MultipleLocator来强制每个单元格都贴上标签。

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator;

# the same values in your confusion matrix
labels = ['1','2','3','4','5','6','7','8','9','10','11','12']
cm = [[0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 131, 23, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 40, 0, 0, 3, 0, 0, 0, 0, 0, 0],
    [0, 0, 43, 0, 0, 0, 31, 0, 0, 0, 0, 0],
    [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 269, 0, 0, 0, 0, 0, 86, 0, 0, 6],
    [0, 0, 101, 0, 0, 0, 0, 0, 0, 45, 0, 1],
    [0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 204]]

fig = plt.figure()
fig.set_figheight(10)
fig.set_figwidth(10)
ax = fig.add_subplot()
cax = ax.matshow(cm)
plt.title('Confusion matrix of the classifier',pad=-570)
fig.colorbar(cax)

ax.xaxis.set_major_locator(MultipleLocator(1))
ax.yaxis.set_major_locator(MultipleLocator(1))

ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
plt.setp(ax.get_xticklabels(), rotation=30, ha="left",
         rotation_mode="anchor")
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.