不同颜色的混淆矩阵

Confusion Matrix with different colors

我有问题。我创建了一个混淆矩阵,如下所示:

下面的代码就是这个:

cm = np.array([[2547,288],[ 255,216]])
fig, ax = plt.subplots(figsize=(12, 8))
ax = sns.heatmap(cm, annot=True, cmap='BuPu', fmt='g')

ax.set_title('Seaborn Confusion Matrix with labels\n\n');
ax.set_xlabel('\nPredicted Values')
ax.set_ylabel('Actual Values ');

## Ticket labels - List must be in alphabetical order
ax.xaxis.set_ticklabels(['True','False'])
ax.yaxis.set_ticklabels(['True','False'])

## Display the visualization of the Confusion Matrix.
plt.show()

这很可能很好,但我希望它看起来像这样有点不同:

如您所见,应该正确的颜色是绿色,其他颜色是红色,我还想显示标签(真阳性、真阴性……)。标签应该用于实际值和预测值以及负值和正值。所以 1:1 如下图所示。

有什么方法可以在 seaborn 中添加标签和更正颜色? 非常感谢您的帮助!

您可以创建一个热图,将单位矩阵作为数据,并将您想要的数字作为注释。使用仅由两种颜色创建为调色板的颜色图(首先是 0 的颜色,然后是 1 的颜色)。 Seaborn 会注意使用适当的文本颜色。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

sns.set(style='white')
cm = np.array([[2547, 288], [255, 216]])
fig, ax = plt.subplots(figsize=(12, 8))
sns.heatmap(np.eye(2), annot=cm, fmt='g', annot_kws={'size': 50},
            cmap=sns.color_palette(['tomato', 'palegreen'], as_cmap=True), cbar=False,
            yticklabels=['True', 'False'], xticklabels=['True', 'False'], ax=ax)
ax.xaxis.tick_top()
ax.xaxis.set_label_position('top')
ax.tick_params(labelsize=20, length=0)

ax.set_title('Seaborn Confusion Matrix with labels', size=24, pad=20)
ax.set_xlabel('Predicted Values', size=20)
ax.set_ylabel('Actual Values', size=20)

additional_texts = ['(True Positive)', '(False Negative)', '(False Positive)', '(True Negative)']
for text_elt, additional_text in zip(ax.texts, additional_texts):
    ax.text(*text_elt.get_position(), '\n' + additional_text, color=text_elt.get_color(),
            ha='center', va='top', size=24)
plt.tight_layout()
plt.show()