Ich experimentiere mit Bokeh-Datentabelle, um sie anzuzeigen Daten eingebettet in eine Webseite. Es funktioniert ganz gut.

Gibt es eine Möglichkeit, den Tabelleninhalt aus der angezeigten Datentabelle zu speichern? Andere Bokeh-Diagramme verfügen über eine Symbolleiste für verschiedene Funktionen, einschließlich Speichern, aber die DataTable scheint nicht mitgeliefert zu werden. Ich weiß sehr wenig über Javascript oder Slickgrid, das in der Bokeh-Datentabelle verwendet wird. Und ich frage mich, ob es möglich ist.

Vielen Dank!

EDIT - Es scheint, dass meine ursprüngliche Frage nicht klar genug war. Hoffe, folgende Bilder können helfen, zu veranschaulichen:

Dem Bokeh-Plot sind Symbolleisten zugeordnet:

enter image description here

Die Datentabelle hat sie jedoch nicht standardmäßig und es werden auch keine 'tools'-Parameter verwendet:

enter image description here

Ist es möglich, der Datentabelle die Schaltfläche "Speichern" hinzuzufügen, damit die Person, die die Tabelle anzeigt, sie als tabulatorgetrennte oder CSV-Dateien herunterladen kann? Muss nicht unbedingt gleich aussehen, aber mit der gleichen Funktion zum Speichern.

11
xyliu00 5 Aug. 2015 im 08:32

2 Antworten

Beste Antwort

Es wäre schön, wenn bokeh eine Tool-Schaltfläche zum Speichern / Exportieren der Datentabelle in csv / txt / excel-Dateien bereitstellen würde. Wenn dies bereits der Fall ist, habe ich es noch nicht im Dokument gefunden.

In der Zwischenzeit besteht eine mögliche Antwort darin, das js-Array (das sich unter der Bokeh-Datentabelle befindet) mit nativem Javascript in CSV zu exportieren. Es wurde hier und beschrieben hier.

HINZUFÜGEN: Bokeh hat Rückrufe für die Verwendung von js. Eine einfache Beschreibung lautet hier. lese immer noch darüber ...

EDIT: Es ist wahrscheinlich schon eine Weile da, aber ich habe gerade ein Beispiel auf der Bokeh-Website für Speichern von CSV gesehen aus der Datentabelle.

4
Community 23 Mai 2017 im 12:33

Für diejenigen, die Probleme beim Anpassen oder Finden des Beispiels auf der Bokeh-Website haben oder nur sehr faul sind, erledigt der folgende Code die minimale Aufgabe:

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

source = ColumnDataSource({'list1':[0,1,2,3],'list2':[4,5,6,7]})
button = Button(label="Download", button_type="success")

javaScript="""
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'
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'))
}
"""

button.callback = CustomJS(args=dict(source=source),code=javaScript)
show(button)
1
Joris 13 Juni 2019 im 07:41