Path: blob/main/examples/apps/django_multi_apps/stockscreener/pn_model_20122019.py
2014 views
# inputs1# https://stackoverflow.com/questions/55743958/panel-widgets-do-not-update-plot2import datetime as dt34import holoviews as hv5import hvplot6import hvplot.pandas7import param89import panel as pn1011# # initialization12# pn.widgets.DatetimeInput.format = '%d %B %Y'13# hv.plotting.bokeh.ElementPlot.bgcolor = "#fbfcfc"14# hv.plotting.bokeh.ElementPlot.gridstyle = {"grid_line_alpha": 0.6, "grid_line_dash": 'dashed'}15# # hv.plotting.bokeh.ElementPlot.gridstyle={"grid_line_alpha": 1.0}16#17#18#19# def __disable_logo(plot, element):20# plot.state.toolbar.logo = None21#22#23# hv.plotting.bokeh.ElementPlot.finalize_hooks.append(__disable_logo)24#25# css = '''26# .background-grey {27# background: bl#fbfcfc;28# border-radius: 5px;29# border: 1px black solid;30# }31# '''32# pn.extension(raw_css=[css])333435class StockScreener(param.Parameterized):36# interface37df = param.DataFrame(precedence=-1)38Index = pn.widgets.MultiSelect()39Rebase = pn.widgets.Checkbox(name='Rebase', value=True)40From = pn.widgets.DateSlider()4142def __init__(self, df, **params):43super().__init__(**params)44# init df45self.df = df46self.start_date = dt.datetime(year=df.index[0].year, month=df.index[0].month, day=df.index[0].day)47self.end_date = dt.datetime(year=df.index[-1].year, month=df.index[-1].month, day=df.index[-1].day)48self.col = list(self.df.columns)49# init interface50self.Index = pn.widgets.MultiSelect(name='Index', value=self.col[0:5], options=self.col,51size=min(10, len(self.col)))52self.From = pn.widgets.DateSlider(name='From', start=self.start_date, end=self.end_date, value=self.start_date)5354@param.depends('Index', 'Rebase', 'From.value', watch=True)55def update_plot(self, **kwargs):56unds = list(self.Index.value)57pos = self.df.index.get_loc(self.From.value, method='bfill')58dfp = self.df.iloc[pos:][unds]59if self.Rebase.value:60dfp = 100 * dfp / dfp.iloc[0]61return dfp.hvplot(grid=True, colormap='Paired')626364