如何用Seaborn在混淆矩阵图中展示准确率、精确率与召回率
解决方案:在Seaborn混淆矩阵中添加精确率、召回率与准确率
以下是修改后的完整代码,结合你的混淆矩阵和分类报告,实现包含分类指标的目标样式:
import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.metrics import confusion_matrix # 你的混淆矩阵(直接用给定的值) c_mat = np.array([[65, 0, 0, 0], [0, 51, 0, 0], [0, 0, 31, 1], [0, 0, 0, 52]]) # 从分类报告提取指标 precision = [1.00, 1.00, 1.00, 0.98] # 对应D1-D4的精确率 recall = [1.00, 1.00, 0.97, 1.00] # 对应D1-D4的召回率 accuracy = 0.99 # 全局准确率 class_names = ["D1", "D2", "D3", "D4"] # 准备混淆矩阵内的标签(计数+占比) group_counts = ["{0:0.0f}".format(value) for value in c_mat.flatten()] group_percentages = ["{0:.2%}".format(value / np.sum(c_mat)) for value in c_mat.flatten()] labels = [f"{v1}\n{v2}" for v1, v2 in zip(group_counts, group_percentages)] labels = np.asarray(labels).reshape(4, 4) # 设置画布,预留空间放置指标 fig, ax = plt.subplots(figsize=(8, 7)) # 绘制混淆矩阵热力图 sns.heatmap(c_mat, annot=labels, cmap='Reds', fmt='', xticklabels=class_names, yticklabels=class_names, cbar=False, ax=ax) # 添加每行的召回率(右侧) for i in range(len(recall)): ax.text(len(class_names) + 0.3, i + 0.5, f"Recall: {recall[i]:.2f}", va='center', ha='left', fontweight='bold') # 添加每列的精确率(底部) for j in range(len(precision)): ax.text(j + 0.5, len(class_names) + 0.3, f"Precision: {precision[j]:.2f}", va='bottom', ha='center', fontweight='bold') # 添加全局准确率(右下角) ax.text(len(class_names)/2, len(class_names) + 0.8, f"Overall Accuracy: {accuracy:.2f}", va='bottom', ha='center', fontweight='bold', fontsize=12) # 调整标题和坐标轴 ax.set_title('Predicted Damage State', fontweight='bold', pad=20) ax.tick_params(labeltop=True, labelbottom=False, top=True, bottom=False) ax.set_ylabel('Actual Damage State', fontweight='bold') # 调整布局,避免指标被截断 plt.subplots_adjust(right=0.85, bottom=0.2) plt.show()
关键修改说明:
- 指标提取与赋值:直接从你提供的分类报告中提取精确率、召回率和全局准确率,手动赋值到列表中(如果需要自动化,可以用
sklearn.metrics.classification_report的输出字典来解析)。 - 画布空间预留:通过
figsize和subplots_adjust调整画布大小和边距,为右侧的召回率、底部的精确率预留空间。 - 文本添加:使用
ax.text()在指定坐标位置添加召回率、精确率和全局准确率文本,设置对齐方式和字体加粗,确保可读性。 - 热力图布局优化:保持原有的混淆矩阵标签(计数+占比),同时扩展布局容纳额外指标,避免元素重叠。
额外优化建议:
- 如果目标样式要求指标嵌入到热力图的边缘(比如作为额外的行/列),可以修改混淆矩阵数组,添加额外的行和列来放置精确率和召回率,再调整热力图的配色区分指标区域。
- 可以通过修改
fontsize参数统一调整所有文本的大小,保持视觉一致性。
内容的提问来源于stack exchange,提问作者Rachit Sharma
相关产品推荐
相关产品推荐

