如何在 Bokeh 上为 Columndatasource 传递单值列表?剧情不再渲染

How to pass single-value lists for Columndatasource on Bokeh? Plot is no longer rendering

我试图通过源传递多个情节信息,但列的长度不同。当我绘制 1 行时,它工作正常,但是当我更改代码以适用于多行时,绘图根本不再呈现。

我将我的来源定义为:

source = ColumnDataSource(data=dict(x1=[], y1=[], x2=[], y2=[], x3=[], y3=[]))

我的图和线是:

p = figure(x_axis_type="datetime", title="", sizing_mode="fixed", height = 500, width = 900)

p.line(x ="x1"[0], y="y1"[0], source=source)

我希望最终能够在此图上绘制多条线,但每条线可能具有不同数量的值,因此由于 ColumnDataSource 仅适用于相同长度的列,因此我将这些列放在单列中 -值列表: 来自我的 update() 函数。

source.data = dict(
    x1=[df1['Time']],
    y1=[df1['Value']],
    
    x2=[df2['Time']],
    y2=[df2['Value']],

    x3=[df3['Time']],
    y3=[df3['Value']],
    )

我更改了问题的 df 名称。

我不确定它有多相关,但数据是 2 列,其中有很多行:

54231  2020-12-04 23:54:31.863000+00:00.

我的想法是,我可以获取字典的第一项(在 p.line 上),它会简单地使用那里的数据,但它不会再呈现,有人知道吗?

如果我在这里缺少您需要指导我的信息,请告诉我!

提前致谢。

如果您需要用不同的点数绘制多条线,那么您有两种选择:

  • 对每一行使用单独的调用 line,对每一行使用单独的 CDS(它们各自具有相同长度的列)

  • 使用可以接受“列表列表”(或数组)的multi_line一次绘制多条线(子列表或子数组可以 有不同的长度)。

    source.data = dict(xs=[[1, 3, 2], [3, 4, 6, 6]], 
                        ys=[[2, 1, 4], [4, 7, 8, 5]])
    p.multi_line('xs', 'ys', source=source)
    

在我看来,您的问题源于这一行:

p.line(x="x1"[0], y="y1"[0], source=source)

x="x1"[0] 没有做 x = "the first value from x1",它实际做的是这样的:x="x" 因为你只是将字符串 "x1" 分割为第一个(第零个) ) 元素,即子串 "x".