散景,无法对 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)
让我知道这是否适合你。
我已经试了大半夜了,真的不应该这么难。但是,由于存在所有不同的版本和错误示例,我发现这很困难。有人能把我说直吗?
我只需要在更新 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)
让我知道这是否适合你。