用按钮迭代到 Bokeh 图中的某个值
Iterate with a button to a certain value in the Bokeh graph
下面的代码创建了下面的图表
from bokeh.plotting import figure
from bokeh.io import show, output_notebook
from bokeh.models import Button, CustomJS
from bokeh.layouts import row
from random import random
p = figure(x_range=(0, 10))
p.line(list(range(1000)), [random() for _ in range(1000)])
b = Button(label='Show next 10', callback=CustomJS(args=dict(xr=p.x_range),
code="""
xr.start = xr.end;
xr.end = xr.end + 10;
"""))
我怎样才能让它显示从 y 轴到当前位置的下一个“0.5”值而不是在图表上显示下一个值
我用 choice
替换了 random
因为在随机浮点值数组中找到特定值几乎总是 return 没有。
此代码以这样一种方式滚动当前视口,以便下一个合适的值恰好位于中间。当没有这个值时,按下按钮不会做任何事情。
请注意,所有关于 "next values" 的讨论都意味着 x 轴的数据在任何一步都不会减少。
from bokeh.plotting import figure
from bokeh.models import Button, CustomJS, ColumnDataSource
from random import choice
p = figure(x_range=(0, 10))
ds = ColumnDataSource(data=dict(x=list(range(1000)),
y=[choice([1, 2, 3, 4, 5]) for _ in range(1000)]))
p.line(x='x', y='y', source=ds)
TARGET_Y = 2
b = Button(label='Show next {}'.format(TARGET_Y),
callback=CustomJS(args=dict(ds=ds, xr=p.x_range),
code="""
const half_span = (xr.end - xr.start) / 2;
const mid = xr.start + half_span;
const ys = ds.data['y'];
const new_mid = ds.data['x'].find((x, idx) => x > mid && ys[idx] === %s);
if (new_mid !== undefined) {
xr.start = new_mid - half_span;
xr.end = new_mid + half_span;
}
""" % TARGET_Y))
下面的代码创建了下面的图表
from bokeh.plotting import figure
from bokeh.io import show, output_notebook
from bokeh.models import Button, CustomJS
from bokeh.layouts import row
from random import random
p = figure(x_range=(0, 10))
p.line(list(range(1000)), [random() for _ in range(1000)])
b = Button(label='Show next 10', callback=CustomJS(args=dict(xr=p.x_range),
code="""
xr.start = xr.end;
xr.end = xr.end + 10;
"""))
我怎样才能让它显示从 y 轴到当前位置的下一个“0.5”值而不是在图表上显示下一个值
我用 choice
替换了 random
因为在随机浮点值数组中找到特定值几乎总是 return 没有。
此代码以这样一种方式滚动当前视口,以便下一个合适的值恰好位于中间。当没有这个值时,按下按钮不会做任何事情。
请注意,所有关于 "next values" 的讨论都意味着 x 轴的数据在任何一步都不会减少。
from bokeh.plotting import figure
from bokeh.models import Button, CustomJS, ColumnDataSource
from random import choice
p = figure(x_range=(0, 10))
ds = ColumnDataSource(data=dict(x=list(range(1000)),
y=[choice([1, 2, 3, 4, 5]) for _ in range(1000)]))
p.line(x='x', y='y', source=ds)
TARGET_Y = 2
b = Button(label='Show next {}'.format(TARGET_Y),
callback=CustomJS(args=dict(ds=ds, xr=p.x_range),
code="""
const half_span = (xr.end - xr.start) / 2;
const mid = xr.start + half_span;
const ys = ds.data['y'];
const new_mid = ds.data['x'].find((x, idx) => x > mid && ys[idx] === %s);
if (new_mid !== undefined) {
xr.start = new_mid - half_span;
xr.end = new_mid + half_span;
}
""" % TARGET_Y))