Я работаю над примером графика OHLC в Боке, который я получил, чтобы работать изначально.Теперь я пытаюсь настроить его с помощью DateRangeSlider в отдельном столбце, но не могу ничего показать.
Я знаю, что текущий код на самом деле не соединяет DateRangeSlider для изменения дат, и этохорошо.Я просто хочу, чтобы он правильно отображался.
Мне кажется, что проблема возникает в части кода с вкладками.
Я редактировал код и текущий код ошибки.получаю:
Ошибка запуска обработчика приложения: ожидается элемент List (Instance (Panel)), получен seq с недопустимыми элементами [Figure (id = '1005', ...)]
Код ниже:
#import libraries
import pandas as pd
import numpy as np
from bokeh.io import curdoc
from bokeh.plotting import show,figure, output_file
from bokeh.models import HoverTool, ColumnDataSource
from bokeh.models.widgets import DateRangeSlider, Tabs, Panel
from bokeh.layouts import layout, column, row, WidgetBox
df = pd.read_csv("adbe.csv", parse_dates = ["Date"])
def OHLC_tab(df):
#output_file("stockOHLChistory.html")
start_date = df["Date"].min()
end_date = df["Date"].max()
#add to the DF
df["Change"] = (df["Close"] / df["Open"] - 1) * 100
df["Change"] = df["Change"].apply(lambda x: str(round(x,2)) + "%")
#convert dates to sequence
seqs = np.arange(df.shape[0])
df["seq"] = pd.Series(seqs)
#convert dates for hover
df["Date"] = pd.to_datetime(df["Date"])
df["displaydate"] = df["Date"].apply(lambda x: x.strftime('%m/%d'))
def make_plot():
active_dates = df.Date.between(start_date, end_date)
inc = df.Close > df.Open
dec = df.Open > df.Close
print(list(df.columns))
sourceInc=ColumnDataSource(df[inc])
sourceDec=ColumnDataSource(df[dec])
w = 18 * 60 * 60 * 1000
p = figure(plot_height = 500, plot_width = 600,
x_axis_type = "datetime",
sizing_mode = 'scale_both')
hover = HoverTool(names = ['upbars', 'downbars'],
tooltips = [("Date: ", "@displaydate"),
("Open: ", "@Open"),
("Close: ", "@Close"),
("Change: ","@Change")])
p.add_tools(hover)
p.vbar('Date', w, 'Open', 'Close', source = sourceInc,
fill_color = "green", line_color = "green", name = 'upbars')
p.vbar('Date', w, 'Open', 'Close', source = sourceDec,
fill_color = "red", line_color = "red", name = 'downbars')
p.segment(df.Date[inc], df.High[inc], df.Date[inc],
df.Low[inc], color = "green")
p.segment(df.Date[dec], df.High[dec], df.Date[dec],
df.Low[dec], color = "red")
p = style(p)
print(p.title.text)
return p
def style(p):
p.title.text = "Stock History"
p.xaxis.axis_label = "Date"
p.yaxis.axis_label = "Price"
return p
date_select = DateRangeSlider(start = start_date, end = end_date, step = 1,
title = "Date Range", width = 250)
p = make_plot()
p = style(p)
controls = WidgetBox(date_select)
layout = row(controls, p)
tab1 = Panel(child = layout, title = "History")
return p
tab = OHLC_tab(df)
tabs = Tabs(tabs = [tab])
curdoc().title = "Does this work?"
curdoc().add_root(tabs)
print(curdoc().title)