我想要一个滑块部件来放大和缩小bokeh动画。滑块应缩放到图中的特定点(例如(100,123)),并具有最大和最小缩放级别。 我正在使用curdoc()和bokeh服务器。
我想知道有更多经验的人会怎么做。
谢谢
答案 0 :(得分:0)
这是一个非常简单的示例,您可以进一步对其进行自定义和改进。将您的兴趣点放在中间,例如(50,50)并移动滑块。该代码适用于Bokeh v1.0.4
import numpy as np
from bokeh.plotting import figure, show, curdoc
from bokeh.models import Slider, CustomJS, Range1d
from bokeh.layouts import column
slider_zoom = Slider(title = 'Zoom', start = -12, end = 8, value = 0, step = 1)
zoom_value = slider_zoom.value
x = np.linspace(-40, 40, 200)
y = x
p = figure(title = "Zoom Slider", plot_height = 500, plot_width = 600, y_range = Range1d(start = -40, end = 40), background_fill_color = '#efefef')
r = p.line(x, y, color = "red", line_width = 1.5, alpha = 0.8)
r = p.circle(x, y, color = "blue", line_width = 0.5, alpha = 0.8)
last_value = None
def update(attr, old, new):
global last_value
if last_value is not None:
if new > 0:
if new > last_value:
p.y_range.start = p.y_range.start + new
p.y_range.end = p.y_range.end - new
p.x_range.start = p.x_range.start + new
p.x_range.end = p.x_range.end - new
else:
p.y_range.start = p.y_range.start - new
p.y_range.end = p.y_range.end + new
p.x_range.start = p.x_range.start - new
p.x_range.end = p.x_range.end + new
elif new < 0:
if new < last_value:
p.y_range.start = p.y_range.start + new
p.y_range.end = p.y_range.end - new
p.x_range.start = p.x_range.start + new
p.x_range.end = p.x_range.end - new
else:
p.y_range.start = p.y_range.start - new
p.y_range.end = p.y_range.end + new
p.x_range.start = p.x_range.start - new
p.x_range.end = p.x_range.end + new
last_value = new
slider_zoom.on_change('value', update)
layout = column(p, slider_zoom)
curdoc().add_root(layout)
结果: