2017-03-06 14 views
0

Bokehサーバーを使用してBokehでプロットするために「カスタム」関数を使用できるかどうかは誰にもわかりますか?例えば、私はあなたがカスタム関数を使用したBokehでのプロット?

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

ようなものを使用することができます知っている。しかし、どのように

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 

私の現在の試みのようなものを使用してプロットすることができ、ここで、次のとおりです。

http://pastebin.com/7Zk9ampq

が、それを実行されません。私は関数 "update_samples_or_dataset"がまだ働いていることを心配していません。最初のプロットを表示するだけです。どんな助けでも大歓迎です。ありがとう!

答えて

0

インスタンスをFigureインスタンスにアタッチする必要があります。 Figureは、本質的に、ツールバーのような細かい点で一連のプロットです。

1

これはあなたが望むものですか? bokeh.chartsからインポートされたBar関数を使用しなかったことに注意してください。これは、データソースの更新時に更新されないためです。 bokeh.chartsのBarを使用する場合は、その都度プロットを再作成する必要があります。

注:これを実行して更新作業を行うには、コマンドラインから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, 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:ボケプロットをプロットしていますが望んでいたとして、データフレームからのデータを使用する方法下記参照。また、ボタンを押すごとにプロットが更新されます。コマンドを使用する必要があります。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) 
関連する問題