Hi,
I am trying to create a line plot from columndatasource and deploy it on bokeh server. I am stuck on as to how do i should create a line plot after the datatable is created using the columndatasource (src_data). is there a way whereby change in value of source in datatable be passed to plot using datatable_model.on_change(‘source’,call_func) and define plot creation in call_func()? This method dinot work as bokeh couldnt identify the plot in the layout(not there in present code). Thanks.
from re import X
from string import Formatter
from numpy import source
import pandas as pd
import io
import requests
from bokeh.models import PasswordInput,TextInput,ColumnDataSource,DataTable,TableColumn,DateFormatter,Line,NumberFormatter
from bokeh.io import curdoc
from bokeh.layouts import layout
from bokeh.plotting import figure
df=pd.DataFrame([])
src_data=ColumnDataSource()
def callback_obtain_data(attr,old,new):
global df
api_key=api_input_wisget.value
ticker_list=ticker_input_widget.value
url_download='https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={}&datatype=csv&outputsize=full&apikey={}'.format(ticker_list,api_key)
r=requests.get(url=url_download)
data=io.StringIO(r.text)
df=pd.read_csv(data)
df['timestamp']=pd.to_datetime(df['timestamp'])
df['Ticker']=ticker_list
def activate_widget(attr,old,bew):
ticker_input_widget.disabled=False
def datatble_builder(attr,new,old):
global src_data
src_data=ColumnDataSource(df)
columns_datatable=[
TableColumn(field='timestamp',title="Date",formatter=DateFormatter()),
TableColumn(field='Ticker',title='Ticker'),
TableColumn(field='open',title='open'),
TableColumn(field='close',title='close'),
]
datatable_model.source=src_data
datatable_model.columns=columns_datatable
datatable_model.visible=True
# create widgets
api_input_wisget=PasswordInput(placeholder='Please input API_KEY',prefix='API_KEY',value='')
ticker_input_widget=TextInput(placeholder='Please input coma sparated ticker',prefix='ticker_list',disabled=True)
datatable_model=DataTable(visible=False)
# create event callback
api_input_wisget.on_change('value',activate_widget)
ticker_input_widget.on_change('value',callback_obtain_data,datatble_builder)
# create layout
layout_output=layout([
[api_input_wisget,ticker_input_widget],
[datatable_model],
])
# visualize
curdoc().add_root(layout_output)