首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pyviz hvplot生成的小部件中指定默认值。

在pyviz hvplot生成的小部件中指定默认值。
EN

Stack Overflow用户
提问于 2019-03-10 22:09:10
回答 2查看 410关注 0票数 1

我有一个4D数据集,hvplot很好地为我在groupby中指定的维度生成小部件

代码语言:javascript
复制
import xarray as xr

ds = xr.open_dataset('http://gamone.whoi.edu/thredds/dodsC/coawst_4/use/fmrc/coawst_4_use_best.ncd')

rho_vars = ['salt','temp']

from cartopy import crs as ccrs
import hvplot.xarray
import holoviews as hv
from geoviews import tile_sources as gvts
import panel as pn

var_select = pn.widgets.Select(name='Variables:', options=rho_vars, 
                               value='temp')

crs = ccrs.PlateCarree()

def plot(var=None):
    base_map = gvts.OSM
    var = var or var_select.value
    mesh = ds[var][-24:,:,:].hvplot.quadmesh(x='lon_rho', y='lat_rho', rasterize=True, title=var,
                                    width=600, height=400, crs=crs,
                                    groupby=list(ds[var].dims[:-2]), cmap='jet')
    overlay = (base_map * mesh.opts(alpha=0.7)).opts(active_tools=['wheel_zoom', 'pan'])
    widgets = {dim: pn.widgets.Select for dim in ds[var].dims[:-2]}
    return pn.holoviews.HoloViews(overlay, widgets=widgets).layout

def on_var_select(event):
    var = event.obj.value
    dashboard[-1] = plot(var=var)

var_select.param.watch(on_var_select, parameter_names=['value']);

dashboard = pn.Column(var_select, plot(var_select.value))

它产生:

但是,虽然hvplot默认为options OrderedDict的第一个值,但我希望默认为最后一个值。

如果我查看仪表板元素:

代码语言:javascript
复制
print(dashboard)

Column
    [0] Select(name='Variables:', options=OrderedDict([('salt', ...]), value='temp')
    [1] Row
        [0] HoloViews(DynamicMap, widgets={'time': <class 'panel.wid...})
        [1] Column
            [0] Select(name='Forecast time f..., options=OrderedDict([('2019-03-09 ...]), value=numpy.datetime64('2019-03-...)
            [1] Select(name='S-coordinate a..., options=OrderedDict([('-0.96875', ...]), value=-0.96875)

我看到可以在事后指定Select小部件值,如:

代码语言:javascript
复制
dashboard[1][1][1].value = next(reversed(dashboard[1][1][1].options.values())) 

这确实有效:

但是,我想做一个独立的仪表板,当用户选择一个新变量时,这个仪表板默认为最后一个值。对于当前代码,当选择一个新变量时,不幸的是,默认值再次被设置为第一个值。

是否有一种方法可以将我的后期代码嵌入到我的绘图函数中来选择最后一个值,还是有其他更好的方法来实现这一点?

完整笔记本在这里

EN

回答 2

Stack Overflow用户

发布于 2020-05-15 17:07:46

如果我正确理解你的问题,“字段”论点 to hvplot就能做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2019-03-12 12:32:06

正如您可以看到的,当您print(dashboard)时,您有一个小部件的默认值。

代码语言:javascript
复制
Column
    [0] Select(name='Variables:', options=OrderedDict([('salt', ...]), value='temp')
    [1] Row
        [0] HoloViews(DynamicMap, widgets={'time': <class 'panel.wid...})
        [1] Column
            [0] Select(name='Forecast time f..., options=OrderedDict([('2019-03-09 ...]), value=numpy.datetime64('2019-03-...)
            [1] Select(name='S-coordinate a..., options=OrderedDict([('-0.96875', ...]), value=-0.96875)

这里,默认值是第二个小部件的-0.96875

我将在这一行widgets = {dim: pn.widgets.Select for dim in ds[var].dims[:-2]}上使用默认值。

代码语言:javascript
复制
default_value = [...,...]
widgets = {dim: pn.widgets.Select(value=default_val[dim]) for dim in ds[var].dims[:-2]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55092912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档