【问题标题】:How to update Span (Bokeh) using ColumnDataSource?如何使用 ColumnDataSource 更新 Span (Bokeh)?
【发布时间】:2021-06-04 12:19:10
【问题描述】:

我正在尝试使用 ColumnDataSource 更新 Span,但信息未传递到源。不幸的是,Span 没有参数“来源”,那么有没有更好的方法?

我已经像这样定义了我的来源、图形和线条:

m1_source = ColumnDataSource(data=dict(x1=[], y1=[]))
m1_spans = ColumnDataSource(data=dict(x1=[]))    
p = figure(x_axis_type="datetime", title="", sizing_mode="fixed", height = 500, width = 1400)
p.line(x ="x1", y="y1", color = 'blue', source=m1_source)

然后我有一个 for 循环,理想情况下应该绘制多个跨度,每个 'i' 将是一个单独的时间戳:

for i in m1_spans.data['x1']:
    p.add_layout(Span(location=i, dimension='height', line_color='red', line_dash='solid', line_width=1))

这取自我的 update() 函数:

m1_source.data = dict(
   x1=machine_1_vals['mpTimestamp'],
   y1=machine_1_vals['Value'])

m1_spans.data = dict( x1=ToolsDF.loc[ToolsDF['Value'] == float(vals['Tool_val'])]['Timestamp'])

我已经检查过了,m1_spans 确实成功返回了多个时间戳,所以这里不应该出现错误。

我感到困惑的原因是因为我的 p.line 将成功更新而没有问题,但它确实有一个 source 参数,而 span 没有。

对于如何解决此问题的任何建议,我将不胜感激。 如果我应该提供更多信息,我深表歉意,并且可以根据需要进行更新,我只是试图为您保持简短。

谢谢。

【问题讨论】:

    标签: python bokeh pandas-bokeh


    【解决方案1】:

    Span 对象目前无法由ColumnDataSource“供电”。每个Span 只绘制一个跨度,由其自己的location 属性指定。

    您需要单独更新每个 Span 对象上的 location 属性才能更新它。或者,如果您绝对希望能够通过 CDS 驱动更新,您可以考虑改用 multi_linesegmentray 字形。它们都有不同的方式来配置它们的坐标,所以你必须看看哪种方式对你的用例最方便。但它们都有一个权衡,那就是它们都没有Span 支持的完整“无限范围”。

    【讨论】:

    • 非常感谢!你第二次帮助我解决了散景问题。多线是要走的路:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多