1

完成所有数据点的读取后,散景服务器图将更新。

我希望数据点从文件流中一一更新。

我有 MVC 风格的代码:

控制器打开文件流,从文件中读取一行,解析它并提供给查看。

该视图通过使用ColumnDataSource. 一旦控制器调用更新函数,新数据就会流式传输到绘图中。

from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc


class View:
    def __init__(self):
        self.count = 0

        self.source = ColumnDataSource(dict(x=[], y=[]))
        self.p = figure(
           plot_width=900, 
           plot_height=600)
        self.p.line(x='x', y='y', source=self.source)

        curdoc().add_root(self.p)

    def update(self, data):
        self.count += 1

        new_data = dict(
                x=[self.count],
                y=[data])
        self.source.stream(new_data)

有没有人有一个例子或提示,它是一个一个而不是一起完成的?我已经尝试添加定期回调,并且通常遵循散景画廊OHLChttps://github.com/bokeh/bokeh/tree/master/examples/app/ohlc)中的示例。

我认为原因可能是,回调必须来自与接口的交互,而不是来自代码内部。按下按钮进行更新或定期回调都可以做到这一点。但是,像这样添加定期回调curdoc().add_periodic_callback(self.update, 1)并没有帮助。第二个想法是阅读的基本过程阻止了绘图。我编写的其他散景应用程序,例如按下按钮的地方,没有这个问题。唉,这里的情节只有在所有阅读完成后才可用。

非常感谢!

编辑:控制器的代码:

from model import Model
from view import View

class Controller:
    def __init__(self, filename):
        self.model = Model()
        self.view = View()

        with open(filename) as file:
            for self.line in file:
                self.request_data_from_model()
                self.send_data_to_view()

    def request_data_from_model(self):
        return self.model.read(self.line)

    def send_data_to_view(self):
        self.view.update(self.request_data_from_model())

4

0 回答 0