完成所有数据点的读取后,散景服务器图将更新。
我希望数据点从文件流中一一更新。
我有 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)
有没有人有一个例子或提示,它是一个一个而不是一起完成的?我已经尝试添加定期回调,并且通常遵循散景画廊OHLC
(https://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())