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

使用seaborn heatmap设置cbar=False导致灰色热力图消失的解决求助

解决Seaborn热力图灰显区域保留但移除对应色条的问题

问题根源

你用两次heatmap叠加实现灰显效果时,设置cbar=False后灰色底图消失,本质是底图的mask和图层叠加逻辑导致渲染异常,同时原代码存在random.randint的用法错误。


方案1:直接设置轴背景色(推荐)

无需额外绘制灰色热力图,直接通过轴背景色实现无数据区域的灰显,仅保留主热力图的色条:

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

fig = plt.figure(figsize=(6, 5))
# 生成示例数据(修正原代码的随机数生成错误)
adc_data = np.random.randint(0, 50, size=(21, 21))
# 定义无数据区域的mask
data_mask = adc_data < 25

# 设置轴背景为灰色,作为无数据区域的底色
ax = plt.gca()
ax.set_facecolor('lightgray')

# 绘制主热力图,mask掉无数据区域,此时mask区域显示轴的灰色背景
sns.heatmap(adc_data, mask=data_mask, cmap='plasma', linewidths=0.5,
            linecolor='gray', cbar_kws={'label': 'ADC'})
plt.show()

方案2:保留两次热力图叠加

如果必须保留两次heatmap的实现方式,需要明确灰色底图的颜色映射范围,避免渲染异常:

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

fig = plt.figure(figsize=(6, 5))
adc_data = np.random.randint(0, 50, size=(21, 21))
# 用numpy替代循环生成no_data,更高效
no_data = np.where(adc_data < 25, 1, 0)
data_mask = adc_data < 25
data_mask2 = no_data == 0

# 绘制灰色底图,关闭色条,明确vmin/vmax确保颜色映射正确
sns.heatmap(no_data, mask=data_mask2, cmap='Greys', linewidths=0.5, 
            cbar=False, vmin=0, vmax=1)
# 绘制主热力图,mask掉无数据区域,显示下方的灰色底图
sns.heatmap(adc_data, mask=data_mask, cmap='plasma', linewidths=0.5,
            linecolor='gray', cbar_kws={'label': 'ADC'})
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:00:06