如何在同图绘制两个numpy多维矩阵颜色图并标注特征
绘制多维特征矩阵颜色图的最佳方法
看起来你手里的是特征间的相似性/相关性矩阵(从示例里对角线为1的数值能看出来),要把这类二维矩阵绘制成带特征标注的颜色图,用Matplotlib的imshow结合配套工具是最直接高效的方案,下面给你一步步的实现方法,还兼顾了同时展示两个矩阵的场景:
步骤1:确认矩阵形状
首先确保你的数组是二维的(5个特征的话,形状应该是(5,5)),如果是一维输入,先通过array.reshape(5,5)调整形状。
步骤2:单矩阵可视化方案
import numpy as np from matplotlib import pyplot as plt from matplotlib import cm as cm # 自定义你的特征名称列表 feature_names = ['特征1', '特征2', '特征3', '特征4', '特征5'] # 模拟你的二维特征矩阵 array1 = np.array([ [1. , 0.97572023, 0.97671645, 0.99772446, 0.99326534], [0.97572023, 1. , 0.99343976, 0.9844228 , 0.9880037 ], [0.97671645, 0.99343976, 1. , 0.98123456, 0.97987654], [0.99772446, 0.9844228 , 0.98123456, 1. , 0.9956789 ], [0.99326534, 0.9880037 , 0.97987654, 0.9956789 , 1. ] ]) fig, ax1 = plt.subplots(figsize=(8, 6)) # 绘制基础颜色图,选择适合相似性数据的色阶 im = ax1.imshow(array1, cmap=cm.coolwarm, vmin=0.9, vmax=1) # 添加特征标签到轴上 ax1.set_xticks(np.arange(len(feature_names))) ax1.set_yticks(np.arange(len(feature_names))) ax1.set_xticklabels(feature_names) ax1.set_yticklabels(feature_names) # 旋转x轴标签避免重叠 plt.setp(ax1.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor") # 可选:给每个单元格添加具体数值标注 for i in range(len(feature_names)): for j in range(len(feature_names)): ax1.text(j, i, round(array1[i, j], 4), ha="center", va="center", color="black") # 添加颜色条和标题 fig.colorbar(im, ax=ax1) ax1.set_title("特征间相似性矩阵颜色图") plt.tight_layout() plt.show()
步骤3:双矩阵对比可视化方案
如果你需要同时展示array1和array2做对比,用子图布局更清晰:
# 模拟第二个特征矩阵 array2 = np.array([ [0.97572023, 1. , 0.99343976, 0.9844228 , 0.9880037 ], [0.97572023, 0.99 , 1. , 0.97654321, 0.98234567], [0.97671645, 0.99343976, 0.98 , 1. , 0.97890123], [0.99772446, 0.9844228 , 0.98123456, 0.99 , 1. ], [0.99326534, 0.9880037 , 0.97987654, 0.9956789 , 0.98 ] ]) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) # 绘制第一个矩阵 im1 = ax1.imshow(array1, cmap=cm.coolwarm, vmin=0.9, vmax=1) ax1.set_xticks(np.arange(len(feature_names))) ax1.set_yticks(np.arange(len(feature_names))) ax1.set_xticklabels(feature_names) ax1.set_yticklabels(feature_names) plt.setp(ax1.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor") ax1.set_title("矩阵1:特征相似性") # 绘制第二个矩阵 im2 = ax2.imshow(array2, cmap=cm.coolwarm, vmin=0.9, vmax=1) ax2.set_xticks(np.arange(len(feature_names))) ax2.set_yticks(np.arange(len(feature_names))) ax2.set_xticklabels(feature_names) ax2.set_yticklabels(feature_names) plt.setp(ax2.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor") ax2.set_title("矩阵2:特征相似性") # 添加共享颜色条,保证两个图的色阶一致 fig.colorbar(im1, ax=[ax1, ax2], shrink=0.8) plt.tight_layout() plt.show()
为什么这是最佳方法?
imshow是Matplotlib专门为二维数值矩阵设计的可视化工具,渲染效率高,色阶映射灵活,能直观体现数值差异- 配套的轴标签、颜色条和可选的数值标注,能让图表信息完整,完全满足分析或报告场景的需求
- 所有操作都基于你已导入的库,不需要额外安装依赖
内容的提问来源于stack exchange,提问作者Zeist
相关产品推荐
相关产品推荐

