如何将小部件放置在面板上 HoloViews 动态地图

How to place a widget over a panel HoloViews dynamic map

我正在尝试在绘图上显示 HoloViews 动态绘图的小部件(Select、滑块等)。我所能找到的只是 widget_location 参数,它采用相对于绘图的位置(‘left’、‘right’,……)。但我希望它被放置在地块上,而不是旁边。我想知道是否有办法做到这一点?

P.S。例如有 opts(colorbar_opts={'location':(float,float)}) 可用于将颜色条放置在您想要的位置。为小部件提供类似的选项将非常有用。

好的,我找到了解决方案!我必须使用自定义 CSS。下面的代码展示了如何做到这一点。

import holoviews as hv
import panel as pn
pn.extension('ace')
hv.extension("bokeh")


plots = {}
for i in range(5,10):
    data = {
        "x": list(range(0,i)), "y": [i]*i
    }
    plots[i]=hv.Curve(data).opts(width=500)
hvmap = hv.HoloMap(plots)

left_pos = pn.widgets.IntSlider(value=5, step=1, start=-1000, end=5, name="x")
top_pos = pn.widgets.IntSlider(value=5, step=1, start=5, end=200, name="y")
style = pn.pane.HTML(height=0, width=0, sizing_mode="fixed", margin=0)
css = pn.widgets.Ace(height=150)

@pn.depends(left_pos=left_pos, top_pos=top_pos, watch=True)
def _update_css(left_pos, top_pos):
    value = f"""
.bk.panel-widget-box {{
    left: {left_pos}px !important;
    top: {top_pos}px !important;
}}
"""
    css.value = value
    style.object = "<style>" + value + "</style>"

pn.Column("""# How to overlay widgets on HoloViews Map?

We will be using css to overlay and Panel to create the this tool""",
    hvmap,
    "## Settings",
    left_pos,
    top_pos,
    css,
    style,
).servable()

所有功劳归功于 Marc Skov Madsen。原回答here