You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同图绘制两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:13