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

如何将结果矩阵与置信区间矩阵合并为带±符号的可视化矩阵?

合并结果矩阵与置信区间矩阵为「结果±CI」格式的热图

完全可以把两个矩阵合并到同一张热图里,核心思路是自定义热图的标注文本,把对应位置的结果值和置信区间拼接成「数值±CI」的格式,再让Seaborn热图用结果矩阵控制颜色,同时显示拼接后的标注。

完整实现代码

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

# 生成示例数据(模拟你的结果矩阵和CI矩阵)
np.random.seed(42)  # 固定随机种子方便复现
x, y = np.random.rand(2, 1000) * 1
# 结果矩阵
hist, xedges, yedges = np.histogram2d(x, y, bins=10, range=[[0, 1], [0, 1]])
# CI矩阵(实际使用时替换成你的真实CI矩阵即可)
hist_ci, _, _ = np.histogram2d(np.random.rand(1000), np.random.rand(1000), bins=10, range=[[0, 1], [0, 1]])

# 格式化坐标轴刻度
xedges = np.round(xedges, 2)
yedges = np.round(yedges, 2)

# 创建标注文本矩阵:每个单元格为「结果±CI」格式,可调整小数位数控制显示整洁度
annot_text = np.vectorize(lambda val, ci: f"{val:.1f}±{ci:.1f}")(hist.T, hist_ci.T)

# 绘制热图
fig, ax = plt.subplots(figsize=(12, 10))
ax = sns.heatmap(
    hist.T,  # 用结果矩阵控制热图颜色
    annot=annot_text,  # 传入自定义的标注文本
    fmt='',  # 关键:已提前生成格式化文本,无需再用fmt解析
    linewidths=0.5, 
    linecolor='b', 
    center=True,
    annot_kws={"size": 10}  # 调整标注字体大小,避免单元格拥挤
)

# 设置坐标轴刻度
ax.set_xticks(np.arange(len(xedges)), xedges)
ax.set_yticks(np.arange(len(yedges)), yedges, rotation=0)
ax.set(title='Results with Confidence Intervals')
ax.invert_yaxis()

plt.show()

关键细节说明

  • 自定义标注文本:用np.vectorize遍历两个矩阵的对应元素,拼接成指定格式的字符串,:.1f可根据需求调整小数位数(比如.2f显示两位小数)。
  • fmt='':Seaborn的annot默认会用fmt参数格式化数值,但我们已提前生成文本,所以设为空字符串避免解析出错。
  • 热图颜色依据:hist.T作为heatmap的输入数据,热图颜色会基于结果矩阵的数值变化;若想让颜色基于CI矩阵,替换成hist_ci.T即可。
  • 字体大小调整:通过annot_kws={"size": 10}调整标注字体,适配10x10矩阵的单元格尺寸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:20:11