簡體   English   中英

散景:如何使用 stream 動態顯示 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

我唯一要更改的是,不是顯示 integer (在我的情況下, time列的值),該圖應該為每個數據點顯示與其關聯的s值(即command列的值)。 行本身的 position 應該是相同的,只是每個 x 軸刻度應該替換為每個update()派生的相應字符串。

這可以通過使用SingleIntervalTickerFuncTickFormatter來完成。 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 '';
}
''')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM