Bokeh:如何使用流动态显示 X 轴的标称值?
Bokeh: how to dynamically display nominal values for X-axis with stream?
我正在尝试 运行 一个简单的散景服务器,我在其中不断收到一个值和相应的字符串,并使用 stream()
更新数据。 y轴是实数,x轴是我事先不知道的标称值。目前,我有类似于此示例的内容:
from bokeh.layouts import column, gridplot
from bokeh.models import ColumnDataSource
from bokeh.plotting import curdoc, figure
import random
import string
def update():
global val
val = int(val + 10 * random.randint(-100, 100)/50)
s = ''.join(random.choice(string.ascii_letters)) # A random string I have no control over
log.append(s)
source.stream(new_data=dict(value=[val], time=[len(log)], log=[s]))
val = 100
log = []
source = ColumnDataSource(dict(value=[], time=[], log=[]))
p = figure()
p.x_range.follow = "end"
p.x_range.follow_interval = 200
p_curr = p.line(x='time', y='value', line_width=3, source=source)
curdoc().add_root(column(gridplot([[p]])))
curdoc().add_periodic_callback(update, 50)
运行 有:
bokeh serve --show app.py
我唯一想改变的是,该图应该为每个数据点显示 [=14= 的值,而不是显示整数(在我的例子中,time
列的值) ] 与之关联(即 command
列的值)。线本身的位置应该相同,只是每个 x 轴刻度应该替换为每个 update()
.
派生的相应字符串
这可以通过使用 SingleIntervalTicker
和 FuncTickFormatter
来完成。在p = figure()
后添加如下代码:
from bokeh.models import SingleIntervalTicker, FuncTickFormatter
p.xaxis.ticker = SingleIntervalTicker(interval=1, num_minor_ticks=0)
p.xaxis.formatter = FuncTickFormatter(args=dict(source=source), code='''
if(tick < 0){
return '';
}
if(tick < source.data.log.length){
return source.data.log[tick];
}
else{
return '';
}
''')
我正在尝试 运行 一个简单的散景服务器,我在其中不断收到一个值和相应的字符串,并使用 stream()
更新数据。 y轴是实数,x轴是我事先不知道的标称值。目前,我有类似于此示例的内容:
from bokeh.layouts import column, gridplot
from bokeh.models import ColumnDataSource
from bokeh.plotting import curdoc, figure
import random
import string
def update():
global val
val = int(val + 10 * random.randint(-100, 100)/50)
s = ''.join(random.choice(string.ascii_letters)) # A random string I have no control over
log.append(s)
source.stream(new_data=dict(value=[val], time=[len(log)], log=[s]))
val = 100
log = []
source = ColumnDataSource(dict(value=[], time=[], log=[]))
p = figure()
p.x_range.follow = "end"
p.x_range.follow_interval = 200
p_curr = p.line(x='time', y='value', line_width=3, source=source)
curdoc().add_root(column(gridplot([[p]])))
curdoc().add_periodic_callback(update, 50)
运行 有:
bokeh serve --show app.py
我唯一想改变的是,该图应该为每个数据点显示 [=14= 的值,而不是显示整数(在我的例子中,time
列的值) ] 与之关联(即 command
列的值)。线本身的位置应该相同,只是每个 x 轴刻度应该替换为每个 update()
.
这可以通过使用 SingleIntervalTicker
和 FuncTickFormatter
来完成。在p = figure()
后添加如下代码:
from bokeh.models import SingleIntervalTicker, FuncTickFormatter
p.xaxis.ticker = SingleIntervalTicker(interval=1, num_minor_ticks=0)
p.xaxis.formatter = FuncTickFormatter(args=dict(source=source), code='''
if(tick < 0){
return '';
}
if(tick < source.data.log.length){
return source.data.log[tick];
}
else{
return '';
}
''')