Bokeh,不能使用CSV文件回调

时间:2016-02-21 02:39:13

标签: python python-2.7 pandas bokeh

我一直试图在大半夜这样做,这真的不应该这么困难。但是,由于所有不同的版本和错误的例子,我发现它很难。有人可以让我说话吗?

我只需要在更新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时没有更新。感谢。

1 个答案:

答案 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)

请告诉我这是否适合您。