xyl*_*u00 7 python datatable slickgrid bokeh
我正在尝试使用散景数据表来显示嵌入在网页中的数据.它工作得很好.
有没有办法从显示的数据表中保存表格内容?其他散景图有各种功能的工具栏,包括保存,但DataTable似乎没有随附.我对于散景数据表使用的javascript或slickgrid知之甚少.并且想知道它是否可以完成.
谢谢!
编辑 - 看来我原来的问题不够明确.希望以下图片可以帮助说明:
散景图有相关的工具栏:
但是默认情况下数据表没有它,它也不会采用'tools'参数:
是否可以在数据表中添加"保存"按钮,以便人员查看表格可以下载为制表符分隔或csv文件?不一定需要看起来相同,但具有相同的保存功能.
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)
如果 bokeh 提供一个用于保存/导出数据表到 csv/txt/excel 文件的工具按钮,那就太好了。如果已经存在,那么我还没有在文档中找到它。
同时,一个可能的答案是使用本机 JavaScript 将 js 数组(位于散景数据表下方)导出到 CSV。这里和这里已经对此进行了描述。
添加:bokeh 有使用 js 的回调。这里有一个简单的描述。仍在阅读有关它的内容...
编辑:它可能已经存在了一段时间,但我刚刚注意到 Bokeh 网站上有一个用于从数据表保存 csv的示例。