当前位置: 首页 > 面试题库 >

散景数据表-返回选择回调的行和列

司马璞
2023-03-14
问题内容

使用on_change回调,我可以在Bokeh中获取DataTable中所选内容的数字行索引。是否可以:a)获取列索引b)获取索引值(列标题和行标题)

示例代码:

from bokeh.io import curdoc
from bokeh.layouts import row, column
import pandas as pd
from bokeh.models import ColumnDataSource, ColorBar, DataTable, DateFormatter, TableColumn, HoverTool, Spacer, DatetimeTickFormatter

'''
Pandas
'''

df = pd.DataFrame(data = {'Apples': [5,10], 'Bananas': [16,15], 'Oranges': [6,4]})
df.rename(index={0:'A',1:'B'}, inplace=True)

'''
BOKEH
'''

sourceTableSummary = ColumnDataSource(df)
Columns = [TableColumn(field=colIndex, title=colIndex) for colIndex in df.columns] 
data_table = DataTable(columns=Columns, source=sourceTableSummary, index_position = 0, width = 1900, height = 200, fit_columns=False)

'''
Funcs
'''

def return_value(attr, old, new):
    selectionRowIndex=sourceTableSummary.selected.indices[0]
    print("Selected Row Index ", str(selectionRowIndex))
    selectionValue=sourceTableSummary.data['Apples'][selectionRowIndex]
    print("Selected value for Apples ", str(selectionValue))
    # selectionColumnIndex?
    # selectionRowHeader?
    # selectionColumnHeader?


sourceTableSummary.on_change('selected', return_value)

curdoc().add_root(column(children=[data_table]))

这给出了以下内容,它们可以返回行以及选择中的值。如果我总是希望返回单个列,则这是理想的。但是,选择UI(虚线)似乎表明特定的列是已知的,而不仅仅是行。如果无法获得选定的列,我可以同时使用行索引和单元格值来查找它吗?

本地服务器输出和表


问题答案:

以下代码使用JS回调显示行索引和列索引以及单元格内容。第二个Python回调是重设索引的技巧,以便可以检测到对同一行的单击(已使用Bokeh
v1.0.4进行了测试)。与运行bokeh serve --show app.py

from random import randint
from datetime import date
from bokeh.models import ColumnDataSource, TableColumn, DateFormatter, DataTable, CustomJS
from bokeh.layouts import column
from bokeh.models.widgets import TextInput
from bokeh.plotting import curdoc

source = ColumnDataSource(dict(dates = [date(2014, 3, i + 1) for i in range(10)], downloads = [randint(0, 100) for i in range(10)]))
columns = [TableColumn(field = "dates", title = "Date", formatter = DateFormatter()), TableColumn(field = "downloads", title = "Downloads")]
data_table = DataTable(source = source, columns = columns, width = 400, height = 280, editable = True, reorderable = False)

text_row = TextInput(value = None, title = "Row index:", width = 420)
text_column = TextInput(value = None, title = "Column Index:", width = 420)
text_date = TextInput(value = None, title = "Date:", width = 420)
text_downloads = TextInput(value = None, title = "Downloads:", width = 420)
test_cell = TextInput(value = None, title = "Cell Contents:", width = 420)

source_code = """
var grid = document.getElementsByClassName('grid-canvas')[0].children;
var row, column = '';

for (var i = 0,max = grid.length; i < max; i++){
    if (grid[i].outerHTML.includes('active')){
        row = i;
        for (var j = 0, jmax = grid[i].children.length; j < jmax; j++)
            if(grid[i].children[j].outerHTML.includes('active')) 
                { column = j }
    }
}
text_row.value = String(row);
text_column.value = String(column);
text_date.value = String(new Date(source.data['dates'][row]));
text_downloads.value = String(source.data['downloads'][row]); 
test_cell.value = column == 1 ? text_date.value : text_downloads.value; """

def py_callback(attr, old, new):
    source.selected.update(indices = [])

source.selected.on_change('indices', py_callback)
callback = CustomJS(args = dict(source = source, text_row = text_row, text_column = text_column, text_date = text_date, text_downloads = text_downloads, test_cell = test_cell), code = source_code)
source.selected.js_on_change('indices', callback)
curdoc().add_root(column(data_table, text_row, text_column, text_date, text_downloads, test_cell))

结果:

在此处输入图片说明



 类似资料:
  • 我想根据某个列变量的不同值从数据框中选择行,并制作直方图。 输出:空数据框列:[年龄、工人阶级、fnlwgt、教育程度、受教育人数、婚姻状况、职业、关系、种族、性别、capitalgain、CapitalAlloss、每周小时数、国家、收入水平]索引:[] 从上面的几行可以看出,我试图选择收入水平为'

  • 问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是

  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 我想从表视图SACY_BOOK(它是SAP中始终实现的训练表之一)中提取一些数据到我的实习表wa_booking中,通过NUMC字段PA_ANUM进行过滤。到目前为止我得到的是: 代码应该适用于拥有ABAP编辑器的每个人,因为它只使用SAP提供的示例表。 因此,debugger向我显示,如果我选择某个公司,例如agencynum“00000108”,这个确切的数字将发送到pa_anum,前面有0和

  • 问题内容: 如果我在散景中有散点图,并且启用了“框选择工具”,则假设我使用“框选择工具”选择了一些点。如何访问所选点的(x,y)位置信息? 我无法调用“ callback”属性,而“ dimensions”属性仅返回一个列表[“ width”,“ height”]。如果我可以获取“选定框”的尺寸和位置,则可以从此处确定数据集中的点。 问题答案: 您可以在上使用,以使用所选数据的索引更新Python

  • 我尝试将< code>bytea数据从一个表移动到另一个表,在一个查询中更新引用。 因此,我想从用于插入的查询中返回不用于插入的数据。 但我得到了一个查询错误: 我想做这样的事情: 但我无法获取用于插入的所有数据,我无法从子选择返回id。 我受到这个关于如何使用通用表表达式做到这一点的答案的启发,但我找不到一种方法来使它工作。