如何为Seaborn热力图左侧添加行精度(Row-wise Accuracy)?
实现Seaborn热力图左侧添加每行精度
当然可以实现这个需求,下面是修改后的代码,能在热力图左侧添加每行的精度值,效果和你要的参考图一致:
import seaborn as sb import numpy as np from matplotlib import pyplot as plt A = np.array([[10, 5], [3, 10]], dtype=np.int32) # 计算每行精度:取对角线元素(正确分类数)除以该行样本总数 row_accuracy = np.diag(A) / A.sum(axis=1) # 格式化为保留两位小数的字符串,方便显示 accuracy_labels = [f"{acc:.2f}" for acc in row_accuracy] # 创建包含两个子图的布局:左侧小图用于显示精度,右侧大图绘制热力图 fig, (ax_acc, ax_heatmap) = plt.subplots(ncols=2, figsize=(6, 3), gridspec_kw={'width_ratios': [0.15, 1]}) # 在左侧子图添加精度文本,每行对应一个精度值 for idx, acc_label in enumerate(accuracy_labels): ax_acc.text(0.5, idx, acc_label, va='center', ha='center', fontsize=12) # 隐藏左侧子图的坐标轴,只保留文本 ax_acc.set_xlim(0, 1) ax_acc.set_ylim(-0.5, len(A)-0.5) ax_acc.axis('off') # 绘制热力图,指定子图为右侧的ax_heatmap sb.heatmap( A, square=True, annot=True, xticklabels=["False", "Positive"], yticklabels=["False", "Positive"], cbar=False, fmt="2d", ax=ax_heatmap ) plt.title("Example plot") plt.tight_layout() plt.show()
关键步骤说明:
- 计算每行精度:通过
np.diag(A)获取对角线元素(即正确分类的样本数),除以每行的总和得到精度值; - 布局设置:使用
gridspec_kw调整两个子图的宽度比例,让左侧精度区域更窄; - 左侧精度显示:在左侧子图中逐行添加精度文本,隐藏坐标轴让界面更简洁;
- 热力图关联:将热力图指定到右侧子图,保证整体布局协调。
如果希望精度以百分比形式显示,只需要把accuracy_labels的格式改为f"{acc*100:.1f}%"即可。
内容的提问来源于stack exchange,提问作者vahvero
相关产品推荐
相关产品推荐

