2017-03-01 9 views
0

Ich bin neu in Bokeh und fragte mich, ob jemand mir helfen könnte, mir zu sagen, warum meine Handlung nicht aktualisiert wird? Der Code kann hier gefunden werden:Bokeh Plot wird nicht aktualisiert

pastebin.com/rn36b3aY

Der Code soll es nur einige Daten greifen mit der Funktion „get_dataset“, Grundstück ein Balkendiagramm, und lassen Sie mich die Handlung aktualisieren ein Dropdown mit Box und Schieberegler. Kann mir jemand sagen, warum die Handlung nicht aktualisiert wird? Ich kann die Daten bereitstellen, wenn es hilfreich wäre. Vielen Dank!

+1

Wie man es versuchen, auszuführen? Bokeh-Server-Apps müssen mit dem Befehl 'bokeh' ausgeführt werden, z. 'bokeh serve --show app.py' Wenn du das schon machst, was hast du schon probiert zu debuggen? – bigreddot

+0

Hallo, ja, ich habe Bokeh verwendet --show app.py. Ich habe eine neue, leichter zu lesende Version hier pastebin.com/rn36b3aY. Das Update funktioniert immer noch nicht korrekt. Es sieht so aus, als ob dies auf die x = Faktoren auf like 57 zurückzuführen ist. Dataframe "asdata" hat eine kategorische Spalte (die erste Spalte) und eine numerische Spalte (die zweite Spalte). Die numerische Spalte scheint sich zu aktualisieren, aber nicht die kategorische. Wenn ich zum Beispiel die Zeile 57 in plot.vbar umstelle (x = 'y', width = 0.5, bottom = 0, top = 'y', source = source), wird das Diagramm korrekt aktualisiert ('y' ist die numerische Spalte) des Datenrahmens). – Kyle

Antwort

1

können Sie eine vereinfachte Version Ihres Programms mit Daten veröffentlichen?

Ich vermute, dass Ihr Plot möglicherweise nicht aktualisiert wird, da Sie in Ihren Callback-Funktionen dataset_select.value und samples_slider.value verwenden, um die Daten zu aktualisieren. Diese enthalten jedoch die Werte von vor dem Ändern des Sliders/Select. Sie sollten das neue Argument verwenden.

sehen, ob das funktioniert:

def update_select_samples_or_dataset(attrname, old, new): 
    global X, Y 
    dataset = new 
    n_samples = int(samples_slider.value) 

    asdata = get_dataset(dataset, n_samples) 
    X = asdata[['aspects','importance']].as_matrix() 
    source.data = dict(x=X[:,0], y=X[:,1]) 

def update_slider_samples_or_dataset(attrname, old, new): 
    global X, Y 
    dataset = dataset_select.value 
    n_samples = int(new) 

    asdata = get_dataset(dataset, n_samples) 
    X = asdata[['aspects','importance']].as_matrix() 
    source.data = dict(x=X[:,0], y=X[:,1]) 

dataset_select.on_change('value', update_select_samples_or_dataset) 
samples_slider.on_change('value', update_slider_samples_or_dataset) 
+0

Hallo, vielen Dank für Ihre Antwort! Nachdem Sie Ihre Lösung getestet haben, sieht es so aus, als würde das Diagramm immer noch nicht korrekt aktualisiert. Hier ist eine aktualisierte, etwas verkürzte Version des Codes: http://pastebin.com/MLAigEG6 Die beiden Eingangsdatenrahmen kann hier gefunden werden: https://github.com/degravek/bdata Die Der Schieberegler ist standardmäßig auf 15 eingestellt (insgesamt 30 Werte). Wenn der Schieberegler verschoben wird, werden die Achsen für das Diagramm aus irgendeinem Grund nicht aktualisiert. Wenn der Schieberegler beispielsweise auf 2 eingestellt ist, sollten nur 2 Balken angezeigt werden, und die Achsen sollten entsprechend angepasst werden. Vielen Dank für einen Blick. – Kyle

+0

Möglicherweise müssen Sie die Achse manuell mit dem Befehl plot.x_range = ... in den Callback-Funktionen aktualisieren. – Julian

+0

Ich habe das auch versucht, aber es scheint nicht zu funktionieren. Hatten Sie überhaupt die Möglichkeit, sich die Daten anzusehen? Immer noch ratlos. – Kyle