seaborn 热图未正确显示

数据挖掘 Python 海运
2021-09-27 01:08:20

出于某种原因,我的热图不再正确显示。即使有 6 个班级,它也能正常工作。自从我上次使用它以来,我已经安装了许多软件包(包括 plotly)。我不知道究竟是什么原因造成的。如何使注释和 x/y 标签再次居中?在这两个图像中,使用了完全相同的代码。

    import matplotlib.pyplot as plt
    import seaborn
    conf_mat = confusion_matrix(valid_y, y_hat)
    fig, ax = plt.subplots(figsize=(8,6))
    seaborn.heatmap(conf_mat, annot=True, fmt='d',xticklabels=classes, yticklabels=classes)
    plt.ylabel('Actual')
    plt.xlabel('Predicted')
    plt.show()

conf矩阵显示不正确

conf矩阵正确显示

4个回答

当前版本的 matplotlib 破坏了热图。将包降级到 3.1.0

pip install matplotlib==3.1.0

matplotlib/seaborn:第一行和最后一行切成热图的一半

我有同样的问题,通过移动y轴解决:

ax.set_ylim([0,2])

如果您偏移刻度,您可以在不降级的情况下解决此问题。

为一个 2×2 矩阵,这有效:

fig, ax = plt.subplots()
cm = confusion_matrix(labels, predictions)

im = ax.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
ax.figure.colorbar(im, ax=ax)

ax.set(yticks=[-0.5, 1.5], 
       xticks=[0, 1], 
       yticklabels=classes, 
       xticklabels=classes)
# ax.yaxis.set_major_locator(ticker.IndexLocater(base=1, offset=0.5))
# should change to 
ax.yaxis.set_major_locator(ticker.IndexLocator(base=1, offset=0.5))

使用 seaborn 库绘制混淆矩阵

tn, fp, fn, tp = metrics.confusion_matrix(y_test,y_pred).ravel()
matrix = np.array([[tp,fp],[fn,tn]])

# plot 
sns.heatmap(matrix,annot=True, cmap="viridis" ,fmt='g')
plt.xticks([0.5,1.5],labels=[1,0])
plt.yticks([0.5,1.5],labels=[1,0])
plt.title('Confusion matrix')
plt.xlabel('Actual label')
plt.ylabel('Predicted label');