散景,无法对 CSV 文件使用回调

Bokeh, can't use callback with CSV files

我已经试了大半夜了,真的不应该这么难。但是,由于存在所有不同的版本和错误示例,我发现这很困难。有人能把我说直吗?

我只需要在更新 CSV 文件时通过更新绘图来迈出第一步。

这是我一直在尝试的:

from bokeh.client import push_session
from bokeh.io import curdoc
from bokeh.plotting import figure
import pandas as pd


p  = figure()

f = open('lines.csv', 'r')
cv = pd.read_csv(f)
df = pd.DataFrame(cv)
f.close()

X  = df.x
Y  = df.y
r1 = p.line(X,Y, line_width=2)
session = push_session(curdoc())
ds = r1.data_source

def update():
    f = open('lines.csv', 'r') 
    cv = pd.read_csv(f)
    df = pd.DataFrame(cv)

    ds.data['X'] = df.x
    ds.data['Y'] = df.y
    f.close()


curdoc().add_periodic_callback(update, 50)
session.show()
session.loop_until_closed()

它绘制了图形,但当我更改 CSV 时没有更新。谢谢

我发现了两个问题:

首先,您不需要包含 session 管理内容。它主要用于与其他人交换组件(绘图、布局等),而您只是更新数据。

其次,在您的 update 回调中,您设置了大写 "X" 和 "Y",而我认为它们存储为小写 "x" 和 "y".那是因为做 r1 = p.line(x=X,y=Y, line_width=2)。因此,您正在设置绘图中未使用的值。

工作代码是:

from bokeh.io import curdoc
from bokeh.plotting import figure
import pandas as pd

p  = figure()

f = open('lines.csv', 'r')
cv = pd.read_csv(f)
df = pd.DataFrame(cv)
f.close()

X = df.x
Y = df.y
r1 = p.line(x=X, y=Y, line_width=2)
ds = r1.data_source

def update():
  f = open('lines.csv', 'r')
  cv = pd.read_csv(f)
  df = pd.DataFrame(cv)

  ds.data['x'] = df.x
  ds.data['y'] = df.y
  f.close()

curdoc().add_periodic_callback(update, 50)

让我知道这是否适合你。