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
相关产品推荐
相关产品推荐

