有没有办法保存散景数据表内容

xyl*_*u00 7 python datatable slickgrid bokeh

我正在尝试使用散景数据表来显示嵌入在网页中的数据.它工作得很好.

有没有办法从显示的数据表中保存表格内容?其他散景图有各种功能的工具栏,包括保存,但DataTable似乎没有随附.我对于散景数据表使用的javascript或slickgrid知之甚少.并且想知道它是否可以完成.

谢谢!

编辑 - 看来我原来的问题不够明确.希望以下图片可以帮助说明:

散景图有相关的工具栏:

在此输入图像描述

但是默认情况下数据表没有它,它也不会采用'tools'参数:

在此输入图像描述

是否可以在数据表中添加"保存"按钮,以便人员查看表格可以下载为制表符分隔或csv文件?不一定需要看起来相同,但具有相同的保存功能.

Jor*_*ris 6

2021 更新:调整后的代码适用于 python 3.8 和 bokeh 2.2.3

对于那些无法调整或在散景网站上找到示例或只是非常懒的人,下面的代码可以完成最少的工作:

from bokeh.models import ColumnDataSource, CustomJS
from bokeh.models.widgets import Button
from bokeh.io import show
import os

source = ColumnDataSource({'list1':[0,1,2,3],'list2':[4,5,6,7]})
button = Button(label="Download", button_type="success")
button.js_on_click(CustomJS(args=dict(source=source),code=open(os.path.join(os.path.dirname(__file__),"download.js")).read()))
show(button)
Run Code Online (Sandbox Code Playgroud)

以及文件 download.js:

function table_to_csv(source) {
    const columns = Object.keys(source.data)
    const nrows = source.get_length()
    const lines = [columns.join(',')]

    for (let i = 0; i < nrows; i++) {
        let row = [];
        for (let j = 0; j < columns.length; j++) {
            const column = columns[j]
            row.push(source.data[column][i].toString())
        }
        lines.push(row.join(','))
    }
    return lines.join('\n').concat('\n')
}


const filename = 'data_result.csv'
const filetext = table_to_csv(source)
const blob = new Blob([filetext], { type: 'text/csv;charset=utf-8;' })

//addresses IE
if (navigator.msSaveBlob) {
    navigator.msSaveBlob(blob, filename)
} else {
    const link = document.createElement('a')
    link.href = URL.createObjectURL(blob)
    link.download = filename
    link.target = '_blank'
    link.style.visibility = 'hidden'
    link.dispatchEvent(new MouseEvent('click'))
}
Run Code Online (Sandbox Code Playgroud)


xyl*_*u00 5

如果 bokeh 提供一个用于保存/导出数据表到 csv/txt/excel 文件的工具按钮,那就太好了。如果已经存在,那么我还没有在文档中找到它。

同时,一个可能的答案是使用本机 JavaScript 将 js 数组(位于散景数据表下方)导出到 CSV。这里这里已经对此进行了描述。

添加:bokeh 有使用 js 的回调。这里有一个简单的描述。仍在阅读有关它的内容...

编辑:它可能已经存在了一段时间,但我刚刚注意到 Bokeh 网站上有一个用于从数据表保存 csv的示例。