bokeh - RangeSlider 不适用于散点图
问题描述
是否可以使范围滑块与散点图一起使用?如果我将散点图更改为线图,滑块会起作用,但这对我不起作用,因为我无法将框选择工具与线图一起使用。下面的代码片段被简化以演示该问题。我怀疑嵌入式 JavaScript 是问题所在,但我可能错了,因为它与折线图配合得很好。谢谢。
from bokeh.io import show
from bokeh.models import CustomJS, RangeSlider, Column, Row
from bokeh.plotting import figure
x = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
y = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
scatter_plot = figure(width=250, plot_height=600)
scatter_plot.scatter(x, y)
callback = CustomJS(args=dict(y_range=scatter_plot.y_range), code="""
var start = cb_obj.value
y_range.start = start[0]
y_range.end = start[1]
""")
depth_slider = RangeSlider(width=250, show_value=False, start=-20, end=120, value=(20, 80), step=20,
title="Y Scale")
depth_slider.js_on_change('value', callback)
layout = Column(Row(depth_slider), scatter_plot, )
show(layout)
解决方案
Python 和 JS 版本的 Bokeh 工作方式之间似乎存在一些竞争条件或差异。默认情况下,所有范围都是在需要时重新计算的DataRange1d
类的实例。在这种情况下,由于某种原因,它会在您手动设置值后重新计算这些值。start
end
要修复它,请从一开始就手动指定范围:
scatter_plot = figure(..., y_range=(20, 80))
推荐阅读
- c# - Response.Redirect 不适用于 Web 应用程序
- firebase - 在 React-Native 中获取 FCM 令牌
- java - 使用 Retrofit 从 Android 向服务器发送字符串数组
- php - 如何显示最后一个画布图像
- html - 无法用手指在图表上向上或向下滚动视口
- spring-boot - 如何修复 ListenerExecutionFailedException:侦听器抛出异常 amqp.AmqpRejectAndDontRequeueException:超时后收到回复
- python - 在计算密集型场景中,我应该为多线程 CPU 创建多少进程?
- python - Elasticsearch 6.7.0 嵌套“bool”、“should”、“must”查询
- ios - 显示带有实时摄像头层和本机系统铃声的传入视频通话屏幕,同时尊重铃声音量级别
- python - 在 python 中捕获 ONLY 标准输出的输出