Matlab&python绘制混淆矩阵求解绘图,带百分比的混淆矩阵,颜色多变风格多样
Matlab&python绘制混淆矩阵求解绘图,带百分比的混淆矩阵,颜色多变风格多样。最近在模型评估的时候发现,带百分比的混淆矩阵比纯数字版本直观太多了。今天直接上代码,聊聊Matlab和Python两种实现方案,顺便分享几个配色魔改小技巧。
Matlab&python绘制混淆矩阵求解绘图,带百分比的混淆矩阵,颜色多变风格多样。
最近在模型评估的时候发现,带百分比的混淆矩阵比纯数字版本直观太多了。今天直接上代码,聊聊Matlab和Python两种实现方案,顺便分享几个配色魔改小技巧。
先说Matlab党怎么玩
官方自带的confusionchart函数其实藏了不少彩蛋。先看基础操作:
% 生成混淆矩阵
C = confusionmat(actual,predicted);
% 画图
figure;
cm = confusionchart(C, class_names);
cm.Title = 'Confusion Matrix (Counts)';
这时候出来的图只有原始数值。想要百分比?手动给每个格子加上标签:
% 转换为百分比
C_percent = C ./ sum(C,2) * 100; % 按行归一化
% 绘制双标签混淆矩阵
figure;
cm = confusionchart(C, class_names, ...
'Title','Confusion Matrix with Percentage',...
'Colormap', parula); % 换色秘籍在这
% 魔改标签内容
textObjs = cm.NodeChildren;
for i = 1:numel(textObjs)
if strcmp(textObjs(i).Type, 'text')
original = str2double(textObjs(i).String);
percent = C_percent(textObjs(i).UserData==1);
textObjs(i).String = sprintf('%.0f\n(%.1f%%)', original, percent);
end
end
这里有个骚操作:通过NodeChildren属性挖出底层Text对象,把数值和百分比拼接显示。配色方案推荐试jet、hsv这类彩虹色系,注意别用默认的淡色系,对比度太低打印容易翻车。
Python选手这边更简单
sklearn+seaborn组合拳直接搞定:
import seaborn as sns
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true, y_pred)
cm_percent = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] * 100
plt.figure(figsize=(10,8))
ax = sns.heatmap(cm, annot=True, fmt='d',
cmap='RdYlGn', # 红黄绿经典配色
linewidths=0.5,
cbar_kws={'shrink': 0.8})
for i in range(cm.shape[0]):
for j in range(cm.shape[1]):
ax.text(j+0.5, i+0.5,
f"{cm[i,j]}\n({cm_percent[i,j]:.1f}%)",
ha='center', va='center',
color='black' if cm[i,j] < cm.max()/2 else 'white') # 自动反色
重点是这个颜色判断逻辑——当格子底色太深时自动切换文字为白色,避免看不清。想玩点新配色可以试试cubehelix调色板,或者自定义渐变色:
from matplotlib.colors import LinearSegmentedColormap
custom_cmap = LinearSegmentedColormap.from_list(
'diy',
['#FFEEEE', '#FF9999', '#FF4444'] # 粉红渐变
)
最后提醒:混淆矩阵的归一化方向(按行/按列)直接影响百分比计算,医疗领域常用敏感度特异度得按行归一化,分类任务可能用总量归一化,别搞混了。可视化只是工具,背后的统计逻辑才是核心。
(代码测试环境:Matlab R2021a / Python 3.8 + sklearn 1.0.2)






魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)