Python 3.x 如何更改混淆矩阵中的刻度?

Python 3.x 如何更改混淆矩阵中的刻度?,python-3.x,numpy,matplotlib,scikit-learn,confusion-matrix,Python 3.x,Numpy,Matplotlib,Scikit Learn,Confusion Matrix,我正在使用混淆矩阵(图a) 如何使我的刻度从1到3开始,而不是从0到2 我尝试在勾选标记中添加+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_matri

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

如何使我的
刻度从1到3开始,而不是从0到2

我尝试在
勾选标记中添加+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:

图B


您应该获得
plt的
,并更改
xtick_标签
(如果您打算这样做):

结果:


您应该获得
plt的
,并更改
xtick_标签
(如果您打算这样做):

结果:


我遇到了一个类似的问题:当我想为我的类使用自定义标签时,要么是方形框超出了边界,要么是标签被偏移了,如您所示

如果您有多个标签(>7),那么首先需要使用plticker.MultipleLocator将滴答频率显式设置为1。然后,只需设置x和y记号标签,而不提及记号(不设置XTICK和YTICK很重要。如果这样做,imshow/matshow部分将在顶部被截断。)在plot_MISSION_矩阵函数中添加以下行

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_major_locator(loc)
ax.set_yticklabels(['']+iris.target_names)
ax.set_xticklabels(['']+iris.target_names)

我遇到了一个类似的问题:当我想为我的类使用自定义标签时,要么是方形框超出了边界,要么是标签被偏移了,如您在这里所示

如果您有多个标签(>7),那么首先需要使用plticker.MultipleLocator将滴答频率显式设置为1。然后,只需设置x和y记号标签,而不提及记号(不设置XTICK和YTICK很重要。如果这样做,imshow/matshow部分将在顶部被截断。)在plot_MISSION_矩阵函数中添加以下行

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_major_locator(loc)
ax.set_yticklabels(['']+iris.target_names)
ax.set_xticklabels(['']+iris.target_names)

@Aizzaac将
ax.setxticklabels((ax.getxticks()+1.astype(str))
更改为
ax.setxticklabels([lab+'s'代表lab in(ax.getxticks()+1.astype(str)]
@Aizzaac如果答案解决了您的问题,请点击该答案的复选标记接受它(如)让其他人注意到它会在第一眼看到时起作用。@Aizzaac将
ax.setxticklabels((ax.getxticks()+1.astype(str))
更改为
ax.setxticklabels([lab+'s'代表lab in(ax.getxticks()+1.astype(str)])
@Aizzaac如果答案解决了您的问题,请单击该答案的复选标记(如)接受它让其他人注意到它在第一眼就可以工作。