Ich versuche einen interaktiven Bokeh-Schieberegler zu verwenden, um den Inhalt eines Diagramms zu ändern, ähnlich dem Beispiel here. Ich habe zwei verschachtelte Listen x
und y
.Interaktiver Slider mit Bokeh
Ich möchte einfach den Schieberegler den Index der Listen zu plotten ändern. dh wenn der Schieber index = 0, plotten dann x[0]
vs y[0]
, wenn der Schieber Index 1, Grundstück x[1]
vs y[1]
, etc ...
Die Dokumentation Beispiel berechnet die neuen Daten im laufenden Betrieb, die für nicht durchführbar ist die Daten, mit denen ich arbeiten muss.
Wenn ich den Code unten ausführen, zeigt sich nichts in der Handlung ... Ich weiß nicht, Javascript, also ich vermute, das ist, wo ich falsch liege.
Ich führe Python 3.5 und Bokeh 0.12. Dies alles läuft in einem Jupiter-Notizbuch.
import numpy as np
from bokeh.layouts import row
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, show
from bokeh.io import output_notebook
from bokeh.resources import INLINE
output_notebook(INLINE)
x = [[x*0.05 for x in range(0, 500)],
[x*0.05 for x in range(0, 500)]]
y = [np.sin(x[0]),
np.cos(x[1])]
source = ColumnDataSource(data=dict(x=x, y=y))
plot = Figure(plot_width=400, plot_height=400)
plot.line('x'[0], 'y'[0], source=source, line_width=3, line_alpha=0.6)
callback = CustomJS(args=dict(source=source), code="""
var data = source.get('data');
var f = cb_obj.get('value');
x = data['x'][f];
y = data['y'][f];
source.trigger('change');
""")
slider = Slider(start=0, end=1, value=0, step=1, title="index", callback=callback)
layout = row(plot, slider)
show(layout)
Können Sie ein Beispiel Ihrer Daten hinzufügen? –
@ conner.xyz Die Daten stammen von einem Physik-Simulationscode, der zu groß ist, um ihn einzuschließen. Die einfachen x- und y-Arrays im Code haben hier die gleiche Struktur. Jedes verschachtelte Array in x und y entspricht einer anderen Zeit. Die Daten, die ich habe, ändern sich mit der Zeit, also möchte ich in der Lage sein, die Daten innerhalb von x gegen y zu plotten und den Schieberegler zu haben, der den Index steuert, der der Zeit entspricht. Im Wesentlichen möchte ich nur den Index des geschachtelten Arrays ändern und seinen Inhalt grafisch darstellen. Wenn der Slider-Index 0 ist, plotten Sie x [0] gegen y [0] und ändern Sie den Schieberegler auf 1, um x [1] gegen y [1] zu zeichnen. – smillerc
Das Datenattribut 'ColumnDataSource' sollte eDict sein, das String-Spaltennamen 1d-Sequenzen (den Daten für die Zeile) zuordnet. Das heißt, die Übergabe einer verschachtelten Liste ist in diesem Fall nicht sinnvoll. Verschachtelte Listen würden für "mult_line" sinnvoll sein, und dann könnten Sie die Sichtbarkeit jeder Zeile steuern, indem Sie eine Spalte für die Zeilen-Alphas verwenden, die der Slider aktualisiert. – bigreddot