我一直试图在大半夜这样做,这真的不应该这么困难。但是,由于所有不同的版本和错误的例子,我发现它很难。有人可以让我说话吗?
我只需要在更新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时没有更新。感谢。
答案 0 :(得分:0)
我发现了两个问题:
首先,您不需要包含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)
请告诉我这是否适合您。