Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
holoviz
GitHub Repository: holoviz/panel
Path: blob/main/examples/apps/django_multi_apps/stockscreener/pn_model_20122019.py
2014 views
1
# inputs
2
# https://stackoverflow.com/questions/55743958/panel-widgets-do-not-update-plot
3
import datetime as dt
4
5
import holoviews as hv
6
import hvplot
7
import hvplot.pandas
8
import param
9
10
import panel as pn
11
12
# # initialization
13
# pn.widgets.DatetimeInput.format = '%d %B %Y'
14
# hv.plotting.bokeh.ElementPlot.bgcolor = "#fbfcfc"
15
# hv.plotting.bokeh.ElementPlot.gridstyle = {"grid_line_alpha": 0.6, "grid_line_dash": 'dashed'}
16
# # hv.plotting.bokeh.ElementPlot.gridstyle={"grid_line_alpha": 1.0}
17
#
18
#
19
#
20
# def __disable_logo(plot, element):
21
# plot.state.toolbar.logo = None
22
#
23
#
24
# hv.plotting.bokeh.ElementPlot.finalize_hooks.append(__disable_logo)
25
#
26
# css = '''
27
# .background-grey {
28
# background: bl#fbfcfc;
29
# border-radius: 5px;
30
# border: 1px black solid;
31
# }
32
# '''
33
# pn.extension(raw_css=[css])
34
35
36
class StockScreener(param.Parameterized):
37
# interface
38
df = param.DataFrame(precedence=-1)
39
Index = pn.widgets.MultiSelect()
40
Rebase = pn.widgets.Checkbox(name='Rebase', value=True)
41
From = pn.widgets.DateSlider()
42
43
def __init__(self, df, **params):
44
super().__init__(**params)
45
# init df
46
self.df = df
47
self.start_date = dt.datetime(year=df.index[0].year, month=df.index[0].month, day=df.index[0].day)
48
self.end_date = dt.datetime(year=df.index[-1].year, month=df.index[-1].month, day=df.index[-1].day)
49
self.col = list(self.df.columns)
50
# init interface
51
self.Index = pn.widgets.MultiSelect(name='Index', value=self.col[0:5], options=self.col,
52
size=min(10, len(self.col)))
53
self.From = pn.widgets.DateSlider(name='From', start=self.start_date, end=self.end_date, value=self.start_date)
54
55
@param.depends('Index', 'Rebase', 'From.value', watch=True)
56
def update_plot(self, **kwargs):
57
unds = list(self.Index.value)
58
pos = self.df.index.get_loc(self.From.value, method='bfill')
59
dfp = self.df.iloc[pos:][unds]
60
if self.Rebase.value:
61
dfp = 100 * dfp / dfp.iloc[0]
62
return dfp.hvplot(grid=True, colormap='Paired')
63
64