Линия сюжета Боке соединяет каждую точку с первой точкой, что не так? - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь подавать живые данные и наносить их на график относительно даты и времени. Однако каждая точка связана с первой точкой линией. Что здесь не так? Спасибо за любую помощь. (Я сохранил это как test.py и запустил bokeh serve --show test.py в командной строке.)

from bokeh.io import curdoc
from bokeh.models import ColumnDataSource, DatetimeTickFormatter
from bokeh.plotting import figure
import numpy as np

x, y = [], []
source = ColumnDataSource(dict(time=x, data=y))

p = figure(x_axis_type='datetime')
p.line(x='time', y='data', source=source)
p.xaxis.formatter = DatetimeTickFormatter(days="%m/%d %H:%M", months="%m/%d %H:%M",
                                          hours="%m/%d %H:%M", minutes="%m/%d %H:%M")


def update():
    x.append(np.datetime64('now'))
    y.append(np.random.rand())
    source.stream(dict(time=x, data=y), 100)


curdoc().add_root(p)
curdoc().add_periodic_callback(update, 1000)
curdoc().title = "random"

Это выглядит примерно так: enter image description here

1 Ответ

2 голосов
/ 22 апреля 2020

stream - для добавления новых точек к источнику данных. Вы постоянно накапливаете все баллов за каждое обновление и, таким образом, перенаправляете старые баллы, которые вы уже отправили. Нет необходимости добавлять что-либо, отправлять только новые действительные баллы и ничего больше:

def update():
    x = [np.datetime64('now')]
    y = [np.random.rand()]
    source.stream(dict(time=x, data=y), 100)
...