Is is possible to link an plot to a widget, or to set an 'on_selection_event' on plot?

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()
3 Likes