如何用Python极简代码调用matplotlib绘制带标注的混淆矩阵
混淆矩阵极简可视化实现
完全可以用matplotlib生态的工具实现,代码精简、出图美观还自带标注,针对你固定[[tp, fp], [fn, tn]]排列格式的数组,优先推荐用seaborn(基于matplotlib的封装库)实现,代码量最短。
方案1:最短代码实现(matplotlib + seaborn)
先安装依赖(如果没装的话):pip install matplotlib seaborn
可直接运行的代码:
import matplotlib.pyplot as plt import seaborn as sns # 替换成你自己的混淆矩阵数组即可 cm = [[25, 4], [5, 17]] sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['正例', '反例'], yticklabels=['正例', '反例']) plt.xlabel('预测类别') plt.ylabel('真实类别') plt.show()
核心参数作用:
annot=True:自动在每个单元格渲染对应数值标注,不需要手动添加文本fmt='d':强制标注以整数格式展示,避免出现浮点数、科学计数法cmap='Blues':采用低饱和度蓝色色阶,视觉清爽,也可根据喜好替换为Greens、OrRd等matplotlib内置色板- 坐标轴标签和单元格完全对应固定排列规则:
左上单元格:真阳性(TP) | 右上单元格:假阳性(FP)
左下单元格:假阴性(FN) | 右下单元格:真阴性(TN)
方案2:纯matplotlib无额外依赖实现
如果不想额外安装seaborn,纯matplotlib也可以实现同等效果,只是需要手动添加数值标注:
import matplotlib.pyplot as plt import numpy as np cm = np.array([[25, 4], [5, 17]]) plt.imshow(cm, cmap='Blues') plt.xticks([0, 1], ['正例', '反例']) plt.yticks([0, 1], ['正例', '反例']) plt.xlabel('预测类别') plt.ylabel('真实类别') # 循环添加单元格数值标注 for row in range(2): for col in range(2): plt.text(col, row, cm[row, col], ha='center', va='center', color='black') plt.colorbar() plt.show()
两种方案出图都自带色阶条、类别标签、数值标注,需要调整画布大小、字体的话只需要加一行plt.figure(figsize=(x,y))即可自定义尺寸。
内容的提问来源于stack exchange,提问作者robert_gonzalez
相关产品推荐
相关产品推荐

