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

Seaborn Heatmap如何关闭主图仅单独显示色条(cbar)?

问题:单独绘制Seaborn热力图色条,隐藏主图

我正在绘制包含多个子图的图形,每个子图均为Seaborn Heatmap。已关闭所有子图的色条(cbar),现在希望单独绘制色条,但操作时会连带出现主图,需要关闭该主图。

我的代码

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

# 示例数据
df1 = pd.DataFrame(
    [[53.4, 57.8], [54.3, 57.0], [53.7, 57.0], [54.3, 57.2], [55.4, 57.5],
     [43.9, 35.2], [43.4, 34.8], [43.4, 34.7], [43.3, 34.5], [42.7, 33.9]],
    index=pd.to_datetime([
        "2022-08-04 15:06:00", "2022-08-04 15:07:00", "2022-08-04 15:08:00",
        "2022-08-04 15:09:00", "2022-08-04 15:10:00", "2023-10-21 14:00:00",
        "2023-10-21 14:01:00", "2023-10-21 14:02:00", "2023-10-21 14:03:00",
        "2023-10-21 14:04:00"
    ])
)

# 原代码:会生成主图和色条
sns.heatmap(np.reshape(df1.dropna().values.flatten(),(-1,1)),cbar=True,cmap='jet')
plt.show()

当前输出

显示包含一列细小色块的主图,以及右侧的色条。

预期输出

仅显示独立的色条,无主图内容。

解决方案

不需要通过绘制热力图来生成色条,直接利用Matplotlib的ScalarMappable创建独立色条,这样就不会出现多余的主图:

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

# 获取数据的极值,保证色条范围与原热力图一致
data_flat = df1.dropna().values.flatten()
vmin, vmax = data_flat.min(), data_flat.max()

# 创建颜色映射对象
sm = plt.cm.ScalarMappable(cmap='jet', norm=plt.Normalize(vmin=vmin, vmax=vmax))
sm.set_array([])  # 无需传入数据,仅用于定义颜色范围

# 创建仅容纳色条的画布
fig, cax = plt.subplots(figsize=(0.5, 6))  # 调整尺寸适配色条高度
plt.colorbar(sm, cax=cax)

plt.show()

说明

  • 通过vmin和vmax确保色条的颜色范围与之前的热力图完全匹配,保证颜色对应关系一致
  • 用cax参数指定色条的轴,避免生成多余的主图轴
  • 可以通过调整figsize的数值来改变色条的宽度和高度,适配你的布局需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:03:27