当包含标签时,散景显示为空白

时间:2019-04-29 03:33:57

标签: python bokeh

我正在Bokeh中研究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)

1 个答案:

答案 0 :(得分:0)

您的OHLC_tab函数返回的是图形,而不是您可能想要的选项卡的Panel

def OHLC_tab(df):

    ...

    return tab1