散景流轴

Bokeh streaming axes

当我在 Bokeh 服务器上使用 Bokeh Stream 时,我从一个空的 ColumnDataSource 开始 - 但是,这会出现一个问题,因为随后生成的图形没有轴标签,尽管图中的数据正在更新,但轴仍然存在绘制时不变。似乎解决这个问题的方法是固定 x_range 和 y_range - 但是,由于它一直在流式传输,我不希望它被固定......

我猜解决方案也是更新范围,但我不确定该怎么做?

我目前的代码如下:

source_ios = ColumnDataSource({'Date': [], 'Vol': []})
source_gp = ColumnDataSource({'Date': [], 'Vol': []})

ios = figure(toolbar_location=None, x_axis_type='datetime',plot_width=800, plot_height=250)

ios.circle(x='Date',y='Vol', fill_color="pink",line_color=None, fill_alpha=0.05, size=20, source=source_ios)

def update():
    MAU_ios = pd.read_csv('myapp/data/pplus_ios_data.csv')
    MAU_ios['Date'] = pd.to_datetime(MAU_ios['Date'])
    MAU_ios['Vol'] = MAU_ios.Vol.astype(int)

    new_MAU_ios = {'Date':MAU_ios['Date'], 'Vol':MAU_ios['Vol']}
    source_ios.stream(new_MAU_ios)

curdoc().add_periodic_callback(update, 8000)

curdoc().add_root(ios

图表看起来像这样,可以看出轴不会自动更新

如果您不事先创建轴 + 标签,则需要使用 figure()

min_border 属性添加一些填充
from bokeh.io import curdoc
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from random import random

source_ios = ColumnDataSource({'Date': [], 'Vol': []})

ios = figure(toolbar_location=None,plot_width=800, plot_height=250)
ios.xaxis.axis_label = 'Date'
ios.yaxis.axis_label = 'Vol'
ios.min_border_left = 50
ios.min_border_bottom = 50

ios.circle(x='Date',y='Vol',color="pink", size=20, source=source_ios)

i=0
def update():
    global i
    new_MAU_ios = {'Date':range(i,i+10),'Vol':[random() for j in range(10)]}
    source_ios.stream(new_MAU_ios)
    i+=10

curdoc().add_periodic_callback(update, 8000)

curdoc().add_root(ios)