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

如何在Python中叠加绘制两张热力图?

如何叠加Seaborn热力图:背景图+热点图

要实现两张热力图的叠加,核心是让热点图的非高亮区域透明,同时控制高亮区域的透明度,避免完全覆盖背景图。你可以通过以下修改实现:

  • 绘制背景热力图后,绘制热点图时添加mask参数隐藏0值区域,同时用alpha控制高亮区域的透明度。
  • 可选:关闭热点图的颜色条(cbar=False),避免重复显示。

完整示例代码

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

# 生成测试数据:20×20背景图,划分为3个区域
background = np.zeros((20,20))
background[:7, :] = 1  # 第一区域
background[7:14, :] = 2  # 第二区域
background[14:, :] = 3  # 第三区域

# 生成热点图:仅(10,10)附近5×5区域高亮,其余为0
hotspot = np.zeros((20,20))
hotspot[8:13, 8:13] = 5

# 绘制背景热力图
sns.heatmap(background, cmap='Greys', cbar=True)

# 绘制热点热力图:隐藏0值区域,设置透明度
sns.heatmap(hotspot, 
            cmap='RdBu_r', 
            mask=(hotspot == 0),  # 隐藏值为0的区域
            alpha=0.7,  # 控制高亮区域透明度
            cbar=False)  # 关闭热点图的颜色条,避免重复

plt.show()

关键参数说明

  • mask=(hotspot == 0):让热点图中值为0的区域不被绘制,这样背景图的对应区域完全可见。
  • alpha=0.7:设置高亮区域的透明度(范围0-1),数值越小越透明,能更好地保留背景的细节。
  • cbar=False:如果不需要单独的热点图颜色条,可以关闭,避免画面冗余;如果需要,可以调整颜色条的位置(比如用cbar_kws={'location': 'right'})。

如果不局限于Seaborn,也可以用Matplotlib的imshow实现叠加,思路类似:先画背景的imshow,再画热点的imshow并设置alpha和mask。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:30:41