2017-03-06 2 views
0

weiß jemand, ob/wie kann man eine "benutzerdefinierte" Funktion verwenden, um in Bokeh mit dem Bokeh-Server zu plotten? Zum Beispiel weiß, dass ich Sie so etwas wieZeichnen in Bokeh mit benutzerdefinierten Funktion?

plot = figure(toolbar_location=None) 
plot.vbar(x='x', width=0.5, bottom=0, top='y', source=source) 

Aber wie kann man Grundstück mit so etwas wie

def mplot(source): 
    p = pd.DataFrame() 
    p['aspects'] = source.data['x'] 
    p['importance'] = source.data['y'] 
    plot = Bar(p, values='importance', label='aspects', legend=False) 
    return plot 

Mein aktueller Versuch, hier verwenden können:

http://pastebin.com/7Zk9ampq

aber es läuft nicht. Ich mache mir keine Sorgen, dass die Funktion "update_samples_or_dataset" noch funktioniert, sondern nur die erste Grafik, die angezeigt werden soll. Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

Antwort

0

Ich denke, Sie müssen noch Ihre Bar Instanz an eine Figure Instanz anhängen; Ein Figure ist eine Menge von Plots, im Wesentlichen mit Feinheiten wie die Symbolleiste.

1

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
Verwandte Themen