I’m not sure if it’s the behavior you are looking for but with a hook you can acchieve this:
I havent you used your last piece of code but the one before
import numpy as np
import pandas as pd
import sys
import holoviews as hv
from holoviews.operation.datashader import datashade
from holoviews.streams import RangeX
import panel as pn
import panel.widgets as pnw
from functools import partial
hv.extension('bokeh')
pn.extension()
#Generating random data
time_min = 30#minutes
fs = 180
num_samples = time_min*60*fs
index = np.arange(0,num_samples)
time = index/180 #seconds
#Generating data
sine = np.sin(time)
linear = time
square = np.square(time)
#Creating data frame
data = {"time":time,"sine":sine,"linear":linear,"square":square}
df = pd.DataFrame(data=data)
#Initializing variables
left_variable = pnw.Select(name = "variable select", options=["square","linear","sine"])
def plot(variable):
return hv.Curve((df['time'].values, df[variable].values), vdims="W")
#creating timeplot
@pn.depends(variable = left_variable.param.value)
def time_plot(variable):
return plot(variable)
def reset_y_hook(plot, elem):
bkplot = plot.handles['plot']
ydata = elem.dataset.data[elem.dataset.vdims[0].name]
y_range = ydata.min(), ydata.max()
old_y_range_reset = bkplot.y_range.reset_start, bkplot.y_range.reset_end
if old_y_range_reset != y_range:
bkplot.y_range.start, bkplot.y_range.end = y_range
bkplot.y_range.reset_start, bkplot.y_range.reset_end = y_range
dmap = datashade(hv.DynamicMap(time_plot)).opts(width=700, hooks=[reset_y_hook])
#Creating dashboard
dashboard = pn.Column(left_variable,dmap)
dashboard