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

如何用Python的Seaborn/Matplotlib同图可视化关联的2D与1D矩阵?

关联矩阵可视化的实现方案

一、用Seaborn + Matplotlib实现你的刻度共享方案

完全可以通过手动布局子图的方式实现你的设想——将1D矩阵的可视化元素放在2D热力图的侧边,共享同一套刻度。下面是完整的代码示例:

代码实现

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 生成模拟数据(替换成你的真实数据)
m = 10
matrix_2d = np.random.rand(m, m)  # m×m的2D矩阵
matrix_1d = np.random.rand(m)     # m×1的1D矩阵

# 创建画布并手动划分子图区域
fig = plt.figure(figsize=(10, 10))
# 左侧1D矩阵子图(窄竖条)
ax_left = fig.add_axes([0.05, 0.1, 0.05, 0.8])
# 顶部1D矩阵子图(短横条)
ax_top = fig.add_axes([0.1, 0.85, 0.8, 0.05])
# 中心2D热力图子图
ax_heatmap = fig.add_axes([0.1, 0.1, 0.8, 0.75])

# 绘制左侧1D矩阵(用单列热力图匹配中心风格)
sns.heatmap(matrix_1d.reshape(-1, 1), ax=ax_left, cbar=False, cmap='viridis',
            yticklabels=False, xticklabels=False)
# 绘制顶部1D矩阵(用单行热力图匹配中心风格)
sns.heatmap(matrix_1d.reshape(1, -1), ax=ax_top, cbar=False, cmap='viridis',
            yticklabels=False, xticklabels=False)
# 绘制中心2D热力图
heatmap = sns.heatmap(matrix_2d, ax=ax_heatmap, cmap='viridis', cbar=True)

# 统一刻度标签
tick_labels = [f'Item {i}' for i in range(m)]
ax_heatmap.set_yticks(np.arange(m) + 0.5)
ax_heatmap.set_yticklabels(tick_labels)
ax_heatmap.set_xticks(np.arange(m) + 0.5)
ax_heatmap.set_xticklabels(tick_labels)

# 为1D矩阵添加独立颜色条(避免和2D热力图混淆)
cbar_1d = fig.colorbar(ax_left.collections[0], ax=[ax_left, ax_top], location='right', shrink=0.3)
cbar_1d.set_label('1D Matrix Values')

plt.show()

核心要点

  • 用add_axes精确控制子图位置,保证侧边1D元素和中心热力图完全对齐
  • 1D矩阵采用单列/单行热力图,和中心可视化风格统一;也可以替换为条形图(用sns.barplot),按需选择
  • 单独为1D矩阵配置颜色条,放在画布边缘(如右侧),通过标签明确区分和2D热力图的差异

二、更优的替代可视化方案

如果想更直观体现2D矩阵对1D矩阵的依赖关系,推荐以下两种方式:

  • 聚类热力图+侧边标记:使用seaborn.clustermap,在热力图的行/列侧边添加1D矩阵的颜色条,同时可对2D矩阵进行聚类,快速识别依赖模式
  • 热力图行/列均值标注:在2D热力图的每行右侧或每列底部添加对应1D值的颜色块,比重复放置1D矩阵更紧凑,信息密度更高

三、1D矩阵图例的放置方法

  • 最清晰的方式是为1D元素单独添加颜色条,放在画布边缘(如右侧、底部),和2D热力图的颜色条并排,用标签明确区分两者含义
  • 若用条形图展示1D矩阵,可将图例放在顶部子图的右侧或左侧子图的上方,避免遮挡中心热力图
  • 也可以将1D矩阵的颜色条嵌入到侧边子图的空白区域,减少画布空间浪费

内容的提问来源于stack exchange,提问作者maciejwww

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:30:45