An app version could look something like this
import numpy as np
import panel as pn
import param
import holoviews as hv
pn.extension(sizing_mode="stretch_width")
hv.extension('bokeh')
ACCENT_COLOR = "#0072B5"
class App(pn.viewable.Viewer):
points_selection = param.ListSelector(objects=list(range(10)))
def __init__(self, **params):
super().__init__(**params)
self.points = hv.Points(np.random.multivariate_normal((0, 0), [[1, 0.1], [0.1, 1]], (10,))).opts(color=ACCENT_COLOR, size=8, responsive=True)
sel = hv.streams.Selection1D(source=self.points)
sel.add_subscriber(self.update_points_selection)
def update_points_selection(self, index):
self.points_selection = index
def __panel__(self):
return pn.Row(
pn.widgets.MultiSelect.from_param(self.param.points_selection, sizing_mode='stretch_height'),
self.points.opts(tools=['box_select'], active_tools=['box_select']), sizing_mode="stretch_both"
)
template = pn.template.FastGridTemplate(
site="Panel", title="Linked Plots and Widgets", main=[App()], accent_base_color=ACCENT_COLOR, header_background=ACCENT_COLOR, row_height=300
).servable()