如何标记显示真阳性、假阳性、假阴性和真阴性的混淆矩阵图的数据(而不是轴)

How label to the data (not the axes) of the plot of a confusion matrix that displays True Positive, False Positive, False Negative and True Negative

我正在尝试标记我的混淆矩阵图。下面的第一张图片是我的情节目前显示的内容。随后的图像是我想要模拟的。以下是我要按重要性顺序添加的功能。

  1. 需要将数据标记为 TP = 374 等
  2. 我可以设置 xlabels 和 ylabels 的背景颜色吗?
  3. 只有 4 个象限,我可以指定面部颜色吗?

您可以使用带有显式注释的 seaborn 热图。颜色由数据值结合颜色图定义。

import matplotlib.pyplot as plt
import seaborn as sns

cm = [[327, 237], [289, 200]]
sns.set(font_scale=3)
plt.figure(figsize=(7, 7))
ax = sns.heatmap(data=[[1, 0], [0, 1]], cmap=sns.color_palette(['tomato', 'lightgreen'], as_cmap=True),
                 annot=[[f"TP={cm[0][0]:.0f}", f"FP={cm[0][1]:.0f}"], [f"FN={cm[1][0]:.0f}", f"TN={cm[1][1]:.0f}"]],
                 fmt='', annot_kws={'fontsize': 30}, cbar=False, square=True)

ax.set_xlabel('Actual Values')
ax.set_ylabel('Predicted')
ax.tick_params(length=0, labeltop=True, labelbottom=False)
ax.xaxis.set_label_position('top')
ax.set_xticklabels(['Positive', 'Negative'])
ax.set_yticklabels(['Positive', 'Negative'], rotation=90, va='center')
ax.add_patch(plt.Rectangle((0, 1), 1, 0.1, color='yellow', clip_on=False, zorder=0, transform=ax.transAxes))
ax.add_patch(plt.Rectangle((0, 0), -0.1, 1, color='yellow', clip_on=False, zorder=0, transform=ax.transAxes))
plt.tight_layout()
plt.show()