当有一个函数生成指向DynamicMap的NdOverlay点时,我遇到了一些非常奇怪的情况,在DynamicMap中,函数与面板小部件相关联(我认为面板小部件并不重要)。你知道吗
下面的代码是一个产生预期行为的工作示例。无论何时更改小部件值,都会生成一个新的绘图,其中两组点重叠,具有不同的颜色和相应的图例条目。下图显示代码。你知道吗
a_widget = pn.widgets.Select(name='A', options=[1,2,3,4])
b_widget = pn.widgets.IntSlider(name='B', start=10, end=20, value=10)
widget_box = pn.WidgetBox(a_widget, b_widget, align='center')
@pn.depends(a=a_widget.param.value, b=b_widget.param.value)
def get_points(a, b):
return hv.NdOverlay({x: hv.Points(np.random.rand(10,10)) for x in range(1,3)})
points = hv.DynamicMap(get_points)
pn.Row(widget_box, points)
下面显示的第二个示例是为了演示在某些情况下,您可能只想返回一个空的绘图,而我在本例中所用的方法与本例中的方法相同:http://holoviews.org/gallery/demos/bokeh/box_draw_roi_editor.html#bokeh-gallery-box-draw-roi-editor
当a == 1
时,此代码的结果是一个预期的空图,但当a
具有1
以外的值时,结果非常奇怪,如代码下面的图像所示。你知道吗
a_widget = pn.widgets.Select(name='A', options=[1,2,3,4])
b_widget = pn.widgets.IntSlider(name='B', start=10, end=20, value=10)
widget_box = pn.WidgetBox(a_widget, b_widget, align='center')
@pn.depends(a=a_widget.param.value, b=b_widget.param.value)
def get_points(a, b):
if a == 1:
return hv.NdOverlay({None: hv.Points([])})
else:
return hv.NdOverlay({x: hv.Points(np.random.rand(10,10)) for x in range(1,3)})
points = hv.DynamicMap(get_points)
pn.Row(widget_box, points)
虽然我不能用
NdOverlay
来解决观察到的问题,但是可以在Overlay
的帮助下创建包含或不包含内容的绘图。你知道吗由于
b_widget
从未在您的代码中使用过,为了简单起见,我删除了它。你知道吗在documentation for NdOverlay中描述的如何使用nOverlay的方法与您的方法不同,这可能是观察到的问题的原因之一。你知道吗
无论如何,为了缩小代码的哪一部分对观察到的问题负责,我删除了所有不需要复制它的代码。你知道吗
为了清楚起见,我重命名了
a
的值,并且还确保提供了a
的起始值。你知道吗测试代码时发现,
if
-else
-语句既不重要,所以我也删除了它。你知道吗为了确保变量的行为符合预期,我添加了一些
print
语句。你知道吗这给出了以下最小可复制示例:
运行此代码并在select小部件中选择不同的选项时,一旦选择了其中一个选项
Test1
和Test3
,选项Test
就不会更新。你知道吗当我们像这样改变第一行的默认值时
现在
Test2
没有正确更新。你知道吗所以看起来这是一个使用
NdOverlay
的问题。 因此,我建议您将此问题报告给开发人员(如果尚未完成),或者等待新版本,或者使用不同的方法(例如,如上所示)。你知道吗相关问题 更多 >
编程相关推荐