Hey guys. Was just following the example on the HoloViews website:
https://holoviews.org/user_guide/Dashboards.html
Under the section titled “Building Dashboards”, there is an amazingly clean plot where you can pick the stock and the Y-axis and plot it. Best of all you can save the fully interactive plot to a HTML file!
The only problem is that I don’t understand a way to plot multiple lines on this. For example, I tried changing the radiobutton widget to a toggle widget (to allow me to plot multiple stocks rather than just one), but this threw an error:
“TypeError: getattr(): attribute name must be string”
Which I presume is because the attribute changes from a string to a list when you go from a radio button to a toggle widget.
Code:
!pip install holoviews
!pip install bokeh
import pandas as pd
import holoviews as hv
import bokeh.sampledata
bokeh.sampledata.download()
from bokeh.sampledata import stocks
from holoviews.operation.timeseries import rolling, rolling_outlier_std
hv.extension('bokeh')
def load_symbol(symbol, variable, **kwargs):
df = pd.DataFrame(getattr(stocks, symbol))
df['date'] = df.date.astype('datetime64[ns]')
return hv.Curve(df, ('date', 'Date'), variable).opts(framewise=True)
stock_symbols = ['AAPL', 'IBM', 'FB', 'GOOG', 'MSFT']
variables = ['open', 'high', 'low', 'close', 'volume', 'adj_close']
import panel as pn
symbol = pn.widgets.RadioButtonGroup(options=stock_symbols)
variable = pn.widgets.Select(options=variables)
rolling_window = pn.widgets.IntSlider(name='Rolling Window', value=10, start=1, end=365)
pn.Column(symbol, variable, rolling_window)
dmap = hv.DynamicMap(pn.bind(load_symbol, symbol=symbol, variable=variable))
smoothed = rolling(dmap, rolling_window=rolling_window)
app = pn.Row(pn.WidgetBox('## Stock Explorer', symbol, variable, rolling_window),
smoothed.opts(width=500, framewise=True)).servable()
app