0

下面的代码看起来好像传递给 DynamicMap 的可调用对象不能更改元素类型。当将类别小部件更改BCurve元素时,返回而不是Points,但绘图只是空的。是否不支持这种行为,或者是否opts需要一些魔法才能使其工作?

import holoviews as hv
import numpy as np
import panel as pn
hv.extension('bokeh')
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:100% !important; }</style>"))

main_category_widget = pn.widgets.Select(name='Main category', options=['A','B'], value='A')
widgets = main_category_widget

@pn.depends(selected_main_category=main_category_widget.param.value)
def get_points(selected_main_category):
    if selected_main_category == 'A':
        return hv.Points(np.random.rand(5,5)).opts(size=10, title='Points')
    else:
        return hv.Curve(np.random.rand(5,5)).opts(title='Curve')

points = hv.DynamicMap(get_points).opts(height=400, width=800)

pn.Row(widgets, points)
4

1 回答 1

1

使用代码的hv.Overlay返回类型get_points()按预期工作:

import holoviews as hv
import numpy as np
import panel as pn
hv.extension('bokeh')

main_category_widget = pn.widgets.Select(name='Main category', options=['Points','Curve'], value='Points')

@pn.depends(selected_main_category=main_category_widget.param.value)
def get_points(selected_main_category):
    images = []
    if selected_main_category == 'Points':
        images.append(hv.Points(np.random.rand(5,5)).opts(size=10, title='Points'))
    else:
        images.append(hv.Curve(np.random.rand(5,5)).opts(title='Curve'))
    return hv.Overlay(images)

points = hv.DynamicMap(get_points).opts(height=400, width=800)

pn.Row(main_category_widget, points)
于 2019-12-04T20:24:05.700 回答