Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用Bokeh中的Range Slider选择数据点?_Python 3.x_Callback_Bokeh - Fatal编程技术网

Python 3.x 如何使用Bokeh中的Range Slider选择数据点?

Python 3.x 如何使用Bokeh中的Range Slider选择数据点?,python-3.x,callback,bokeh,Python 3.x,Callback,Bokeh,我正试图在博克建立一个交互式图形。到目前为止,让我们假设我有一个热图如下。用通俗易懂的英语: 我使用矩形绘制矩形,生成热图 我正在添加一个范围滑块 我附加了一个关于范围变化的js_回调 在自定义回调中,我能够检索范围滑块的开始和结束范围 我不确定的是如何用它来选择任何东西。(cb_obj.selected['1d'].index)显示检索所有选定数据点。但人们如何做相反的事情呢 换言之: 如何选择介于值a和b之间的所有矩形 下面是我已经弄明白的代码 from math import pi f

我正试图在博克建立一个交互式图形。到目前为止,让我们假设我有一个热图如下。用通俗易懂的英语:

  • 我使用矩形绘制矩形,生成热图
  • 我正在添加一个范围滑块
  • 我附加了一个关于范围变化的js_回调
  • 在自定义回调中,我能够检索范围滑块的开始和结束范围
我不确定的是如何用它来选择任何东西。(cb_obj.selected['1d'].index)显示检索所有选定数据点。但人们如何做相反的事情呢

换言之:

如何选择介于值a和b之间的所有矩形

下面是我已经弄明白的代码

from math import pi
from bokeh.io import show
from bokeh.models import ColumnDataSource, HoverTool, 
LinearColorMapper, CategoricalColorMapper, ColorBar, LogColorMapper, 
LogTicker
from bokeh.plotting import figure
from bokeh.models.callbacks import CustomJS

col = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
row = ['A', 'B', 'C' , 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
'N', 'O', 'P']

mapper = LogColorMapper(palette="Viridis256", low=min_value,  
high=max_value)
source = ColumnDataSource(data = dict (
        row = test['plate_row'],
    col = test['plate_col'],
    values = test['Melt Temp']))

TOOLS = "reset, tap,box_select, hover,save,pan,box_zoom,wheel_zoom"

p = figure(title="Plate Heatmap", x_range = (0.0,25.0), y_range = 
list(reversed(row)),
       x_axis_location="above", plot_width=650, plot_height=400,
       tools=TOOLS)

r1 = p.rect(x="col", y="row", width=1, height=1,
        source=source, 
        fill_color={'field': 'values', 'transform': mapper},
        line_color=None)

callback = CustomJS(args=dict(source=source), code="""
    var data = source.data;
    var inds = cb_obj.selected['1d'].indices;
    var lower_bound = cb_obj.start;
    var upper_boudn = cb_obj.end;
    // WHAT DO I DO NEXT?
    source.trigger('change');
""")

range_slider = widgetbox(RangeSlider(start=min_value, end=max_value, 
range= (min_value, max_value), step=0.1, title="Hit Threshold"))
range_slider.js_on_change('range', callback)

color_bar = ColorBar(color_mapper=mapper, ticker=LogTicker(),
                 label_standoff=12, border_line_color=None, location= 
(0,0))
p.add_layout(color_bar, 'left')
layout = column(range_slider, p)
show(layout)      # show the plot

虽然我无法找到一种方法来设置选择与否,但我找到了一种方法来实现相同的结果。这可能是如何使用Bokeh服务器的一个主要示例。要达到同样的效果,需要执行以下操作:

  • 用Python更新替换JSCustom回调函数 功能。udpate函数包含用于更新 ColumnDataSource
  • 只需将js_on_change事件替换为on_change事件即可 连接到滑块
  • 将上面的代码与更新功能放在一起 “main.py”位于以应用程序命名的文件夹中
  • 用“bokeh服务——显示插入程序名称”启动bokeh服务器

  • 可以找到这些信息,它们代表了部署交互式可视化的最简单方法。您的案例可能需要更复杂的部署场景。我也在研究这个问题,但这将是另一天的另一个问题。

    虽然我无法找到一种方法来设置选择什么或不选择什么,但我找到了一种方法来实现相同的结果。这可能是如何使用Bokeh服务器的一个主要示例。要达到同样的效果,需要执行以下操作:

  • 用Python更新替换JSCustom回调函数 功能。udpate函数包含用于更新 ColumnDataSource
  • 只需将js_on_change事件替换为on_change事件即可 连接到滑块
  • 将上面的代码与更新功能放在一起 “main.py”位于以应用程序命名的文件夹中
  • 用“bokeh服务——显示插入程序名称”启动bokeh服务器
  • 可以找到这些信息,它们代表了部署交互式可视化的最简单方法。您的案例可能需要更复杂的部署场景。我也在研究这个问题,但这将是下一天的另一个问题