Wollen Sie das? Beachten Sie, dass ich nicht die aus bokeh.charts importierte Balkenfunktion verwendet habe, da diese beim Aktualisieren der Datenquelle nicht aktualisiert wird. Wenn Sie bei der Verwendung von Bar aus bokeh.charts bleiben möchten, müssen Sie das Diagramm jedes Mal neu erstellen.
Hinweis: Um dies auszuführen und Update-Arbeit - müssen Sie bokeh serve --show plotfilename.py
über die Befehlszeile ausführen.
from bokeh.io import curdoc
from bokeh.layouts import layout
from bokeh.models.widgets import Button
from bokeh.plotting import ColumnDataSource, figure
import random
def bar_plot(fig, source):
fig.vbar(x='x', width=0.5, bottom=0,top='y',source=source, color="firebrick")
return fig
def update_data():
data = source.data
data['y'] = random.sample(range(0,10),len(data['y']))
source.data =data
button = Button(label="Press here to update data", button_type="success")
button.on_click(update_data)
data = {'x':[0,1,2,3],'y':[10,20,30,40]}
source = ColumnDataSource(data)
fig = figure(plot_width=650,
plot_height=500,
x_axis_label='x',
y_axis_label='y')
fig = bar_plot(fig, source)
layout = layout([[button,fig]])
curdoc().add_root(layout)
EDIT: unterhalb einer Methode sehen, dass ein Bokeh Plot Plots aber verwendet, um Daten aus einem Datenrahmen, wie man wollte. Es aktualisiert auch die Handlung bei jedem Tastendruck. Immer noch müssen Sie den Befehl bokeh serve --show plotfilename.py
from bokeh.io import curdoc
from bokeh.layouts import layout
from bokeh.models.widgets import Button
from bokeh.plotting import ColumnDataSource
from bokeh.charts import Bar
import random
import pandas as pd
def bar_plot(source):
df = pd.DataFrame(source.data)
fig = Bar(df, values='y', color="firebrick")
return fig
def update_data():
data = {'x':[0,1,2,3],'y':random.sample(range(0,10),4)}
source2 = ColumnDataSource(data)
newfig = bar_plot(source2)
layout.children[0].children[1] = newfig
button = Button(label="Press here to update data", button_type="success")
button.on_click(update_data)
data = {'x':[0,1,2,3],'y':[10,20,30,40]}
source = ColumnDataSource(data)
fig = bar_plot(source)
layout = layout([[button,fig]])
curdoc().add_root(layout)
verwenden