如何更改混淆矩阵中的刻度?

时间:2016-10-25 17:37:35

标签: python-3.x numpy matplotlib scikit-learn confusion-matrix

我正在使用混淆矩阵(图A)

如何让ticks从1到3而不是从0到2开始?

我尝试在tick_marks中添加+1。但它不起作用(图B)

检查我的代码:

import itertools

cm = confusion_matrix(y_test, y_pred)
np.set_printoptions(precision=2)
print('Confusion matrix, without normalization')
print(cm)
plt.figure()
plot_confusion_matrix(cm)


def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Oranges):
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(iris.target_names)) + 1

    plt.xticks(tick_marks, rotation=45)
    plt.yticks(tick_marks)

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

图A:

enter image description here

图B

enter image description here

2 个答案:

答案 0 :(得分:2)

您应该获得axis的{​​{1}}并更改plt(如果您打算这样做):

xtick_labels

结果:

enter image description here

答案 1 :(得分:0)

我遇到了一个类似的问题:当我想为班级使用自定义标签时,如您在此处所示,方形框超出范围或标签被偏移了。

如果您有多个标签(> 7),则首先需要使用 plticker.MultipleLocator 将刻度频率显式设置为一个。然后,您只需设置x和y刻度标签,而无需提及刻度(不设置xticks和yticks很重要。如果这样做,则imshow / matshow部分会在顶部被剪掉。)在 plot_confusion_matrix 函数。

import matplotlib.ticker as plticker

fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cm,cmap=cmap)
fig.colorbar(cax)
loc = plticker.MultipleLocator(base=1.0)
ax.xaxis.set_major_locator(loc)
ax.yaxis.set_majpr_locator(loc)
ax.set_yticklabels(['']+iris.target_names)
ax.set_xticklabels(['']+iris.target_names)