我正在用散景制作一个OHLC图示例,这是我最初开始工作的。现在我正在尝试在单独的列中使用 DateRangeSlider 设置它,但我无法显示任何内容。
我知道当前的代码实际上并没有连接日期范围滑块来更改日期,这很好。我只是希望它正确显示。
我觉得问题出现在代码的选项卡部分。
我一直在编辑代码,我得到的当前错误代码是:
运行应用程序处理程序时出错 :期望列表(实例(面板((的一个元素,得到 seq 带有无效项目 [图(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)
您的OHLC_tab
函数返回的是绘图,而不是您可能想要的选项卡的Panel
:
def OHLC_tab(df):
...
return tab1