散景流轴
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)
当我在 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)