Ric*_*ell 6 python holoviews pyviz
我正在尝试创建一个包含两个 Holoviews 对象的仪表板:一个包含 xarray 变量列表的面板对象,以及一个在输入上采用所选变量的 hvplot对象,如下所示:pn.widgets.Select
def hvmesh(var=None):
mesh = ds[var].hvplot.quadmesh(x='x', y='y', rasterize=True, crs=crs,
width=600, height=400, groupby=list(ds[var].dims[:-2]), cmap='jet')
return mesh
Run Code Online (Sandbox Code Playgroud)
当我从面板小部件中选择变量时,我希望更新地图:
我尝试将其作为动态地图来执行,如下所示:
from holoviews.streams import Params
import holoviews as hv
var_stream = Params(var_select, ['value'], rename={'value': 'var'})
mesh = hv.DynamicMap(hvmesh, streams=[var_stream])
Run Code Online (Sandbox Code Playgroud)
但是当我尝试显示地图时,我得到:
Exception: Nesting a DynamicMap inside a DynamicMap is not supported.
Run Code Online (Sandbox Code Playgroud)
从面板小部件中选择 hvplot 变量似乎是一种常见的需要。使用pyviz实现此目的的最佳方法是什么?
如果它有用,这是我的完整尝试 Jupyter Notebook。
由于groupby所选的每个变量都会发生变化,因此无法将变量列表传递给hvplot. 因此,一种解决方案是每次选择新变量时重新创建绘图。这有效:
import holoviews as hv
from holoviews.streams import Params
def plot(var=None, tiles=None):
var = var or var_select.value
tiles = tiles or map_select.value
mesh = ds[var].hvplot.quadmesh(x='x', y='y', rasterize=True, crs=crs, title=var,
width=600, height=400, groupby=list(ds[var].dims[:-2]),
cmap='jet')
return mesh.opts(alpha=0.7) * tiles
def on_var_select(event):
var = event.obj.value
col[-1] = plot(var=var)
def on_map_select(event):
tiles = event.obj.value
col[-1] = plot(tiles=tiles)
var_select.param.watch(on_var_select, parameter_names=['value']);
map_select.param.watch(on_map_select, parameter_names=['value']);
col = pn.Column(var_select, map_select, plot(var_select.value) * tiles)
Run Code Online (Sandbox Code Playgroud)
这是完整的笔记本。