Flask模板渲染时bokeh图为空

0 投票
1 回答
792 浏览
提问于 2025-04-18 16:55

我正在尝试把一个bokeh图嵌入到一个由简单Flask应用提供的网页中,使用的是我在GitHub上查看bokeh嵌入示例时学到的embed.autoload_server函数。Python这边的所有东西似乎都正常工作,但网页上却没有数据显示(尽管数据在JS图对象中)。我能看到5个bokeh图的操作按钮,但就是看不到实际的图。打开JS控制台后,我发现以下语句中的i变量返回的是undefined(在bokeh.js的第23512行):

i = this.get('dimension');

因此,ranges[i]也变成了undefined,这就是我在控制台看到的错误。

我可以在浏览器中直接访问实际的图的json文件,看到所有的数据都在那里,这也是我为什么去查看JS控制台来排查问题。

如果有任何想法,我会非常感激,因为我现在的JS水平有点生疏。Python的“plot”对象和JS的“plot”对象之间有关系吗?看起来这只是我前端对象缺少“dimension”属性的问题。

针对这个问题,这里是代码,基本上是直接从蜡烛图示例代码中复制过来的,但那是几周前的版本,所以可能有点过时。我之后又重新拉取了一次,但没有再查看这段代码,因为创建图数据时没有遇到问题。

def candlestick():
    store = pd.HDFStore('../data/dt_metastock.h5')

    keys = [key for key in store.keys() if 'daily' in key]
    df = store[keys[0]][:800]
    #df['date'] = pd.to_datetime(df['date'])

    mids = (df.open + df.close)/2
    spans = abs(df.close-df.open)

    inc = df.close > df.open
    dec = df.open > df.close
    w = 12*60*60*1000 # half day in ms

    output_server("candlestick")
    figure(tools="pan,wheel_zoom,box_zoom,reset,previewsave",
           plot_width=1000, name="candlestick")

    hold()

    segment(df.idx, df.high, df.idx, df.low, color='black')
    w = .5
    rect(df.idx[inc].values, mids[inc], w, spans[inc], fill_color="#D5E1DD", line_color="black")
    rect(df.idx[dec].values, mids[dec], w, spans[dec], fill_color="#F2583E", line_color="black")

    curplot().title = keys[0]
    xaxis().major_label_orientation = pi/4
    grid().grid_line_alpha=0.3
    tag = embed.autoload_server(curplot(), cursession())
    return tag

1 个回答

0

你能把你的图表代码发出来吗?最近我们合并了一个新的布局系统,我觉得你可能还在用旧的方法来设置图表的坐标轴...

撰写回答