How to use BoundsX or Selection1D on a stream

Hello everyone.
I would like to calculate the mean value of a time series from a data stream.

So far I could only find examples using a static curve as a source, e.g. in BoundsX — HoloViews v1.15.0. My trails always ran into errors.

  1. Is it possible at all?
  2. Do I have to use another approach, e.g. use the bokeh API → selection Module — HoloViews v1.15.0?


import pandas as pd
import numpy as np
import holoviews as hv
from holoviews import streams

n = 200
xs = np.linspace(0, 1, n)
ys = np.cumsum(np.random.randn(n))
df = pd.DataFrame({'x': xs, 'y': ys})
curve = hv.Curve(df)  # Stream possible? (

def make_from_boundsx(boundsx):
    # Question: df must be defined as `global`?
    sub = df.set_index('x').loc[boundsx[0]:boundsx[1]]
    return hv.Table(sub.describe().reset_index().values, 'stat', 'value')

dmap = hv.DynamicMap(make_from_boundsx, streams=[streams.BoundsX(source=curve, boundsx=(0,0))])

curve.opts(tools=['xbox_select']) + dmap

Thanks for any feedback.