如何在hvplot.image的hover提示中使用xarray自定义坐标xind、yind?
解决hvplot.image自定义坐标hover提示报错问题
问题根源
你的代码中维度命名与坐标序列的对应关系存在混淆,加上rasterize=True时的栅格化处理,导致hover提示无法正确匹配自定义坐标字段。以下是几种可行的解决方案:
方案1:修正维度与坐标的对应关系
调整数据创建逻辑,让x/y维度与同名坐标序列绑定,确保自定义坐标xind/yind正确关联到对应维度:
import numpy as np import xarray as xr import hvplot.xarray sample_data = np.random.rand(500, 128) y_coord = np.linspace(0, 15, 500) x_coord = np.linspace(0, 1, 128) # 让x/y维度对应同名坐标,避免混淆 data = xr.DataArray(data=sample_data, coords=[("y", y_coord), ("x", x_coord)]) # 自定义坐标绑定到对应维度 xind = np.arange(len(x_coord)) yind = np.arange(len(y_coord)) data = data.assign_coords(xind=("x", xind)) data = data.assign_coords(yind=("y", yind)) plot = data.hvplot.image( z="value", x="x", y="y", cmap="gray", width=1200, height=300, hover=True, xlabel="x (mm)", ylabel="y (m)", framewise=True, rasterize=True, hover_cols=["xind", "yind"] # 可正常添加自定义坐标 )
方案2:手动添加自定义HoverTool(保留rasterize)
如果必须使用栅格化渲染,可关闭默认hover,手动添加Bokeh的HoverTool指定提示内容:
from bokeh.models import HoverTool # 关闭默认hover plot = data.hvplot.image( z="value", x="x", y="y", cmap="gray", width=1200, height=300, hover=False, xlabel="x (mm)", ylabel="y (m)", framewise=True, rasterize=True, ) # 自定义hover提示内容 custom_hover = HoverTool( tooltips=[ ("x", "$x{0.00}"), ("y", "$y{0.00}"), ("value", "@image{0.00}"), ("x索引", "@xind"), ("y索引", "@yind"), ] ) plot = plot.opts(tools=[custom_hover])
方案3:移除rasterize简化实现
如果数据量不大无需栅格化,直接去掉rasterize=True参数,再设置hover_cols=["xind","yind"]即可正常显示自定义坐标。
内容的提问来源于stack exchange,提问作者dcoder
相关产品推荐
相关产品推荐

