HoloViews热力图子图共享xy轴但色条独立的实现方法
Holoviews 共享xy轴+独立色条热力图实现方案
问题原因
Holoviews给布局设置shared_axes=True时,默认会对同类型元素同时开启两类联动:
- 位置维度(x、y轴)的范围、平移、缩放操作
- 值维度(热力图对应颜色映射的z轴)的范围匹配
如果不做额外配置,两类联动会同时生效,当不同子图的z值范围差异较大时,小范围数据的色条会被全局范围压缩,完全无法展示真实分布;如果直接设置shared_axes=False,又会同时关闭xy轴的联动,无法满足坐标轴对齐的需求。
解决方法
不需要调整shared_axes的全局开关,只要在每个子图的配置里显式指定自身的颜色范围clim,就可以打断值维度的全局联动,同时保留xy轴的共享联动效果。这个逻辑对所有带颜色映射的Holoviews元素(比如Image、QuadMesh等)都生效,不是只针对HeatMap。
修改后的可运行代码如下:
import holoviews as hv import numpy as np hv.extension('bokeh') X, Y = np.meshgrid(np.linspace(-1, 1, 101), np.linspace(-2, 2, 201)) Z1 = X ** 2 + Y ** 2 Z2 = 0.2 * np.sin(X + 100) + 0.1 * np.cos(Y * 10) props_subplots = [(Z1, "viridis", "Z1"), (Z2, "Greens_r", "Z2")] hv.Layout([hv.HeatMap((X, Y, data)).opts( frame_width=200, colorbar=True, cmap=cmap, title=title, # 单独绑定当前子图的颜色上下限,跳过全局色条联动 clim=(data.min(), data.max()) ) for data, cmap, title in props_subplots]).opts(shared_axes=True)
实现效果
- 对任意子图做x/y轴的平移、缩放操作,另一子图会同步响应,坐标轴始终保持对齐
- 两个子图的色条完全独立,各自匹配自身数据的数值区间:Z1色条范围为05,对应抛物面的数值分布;Z2色条范围约为-0.30.3,可以正常展示小振幅的波动纹理,不会出现被大范围数据压缩导致的显示异常。
内容的提问来源于stack exchange,提问作者mcsoini
相关产品推荐
相关产品推荐

