2017-06-12 9 views
1

私は、ボークプロットでvbarメソッドを使用してバープロットを描画したいと考えています。ここで、x軸は数値ではなくカテゴリ値をとります。チュートリアルページ(http://bokeh.pydata.org/en/latest/docs/reference/plotting.html#)で提供されている例は、数値のx軸だけです。Bokehプロットモジュールでvbarメソッドを使用してカテゴリバープロットを描画する方法

バープロットはウィジェットを介して更新可能でなければならないので、Bar()は使用できないようですが、ソースデータをフィードできるvbar()メソッドを使用しようとしました。

私は歴史からいくつかの同様の質問と回答を見つけましたが、それでも私の問題を正確には解決していないようです。

私は、次のコードスニペットを試してみましたが、それはいくつかのエラーで失敗しました:

from bokeh.plotting import figure, output_file 
from bokeh.io import show 
from bokeh.models import ColumnDataSource, ranges 
from bokeh.plotting import figure 
import pandas as pd 

output_file("test_bar_plot.html") 

dat = pd.DataFrame([['A',20],['B',20],['C',30]], columns=['category','amount']) 

source = ColumnDataSource(dict(x=[],y=[])) 

x_label = "Category" 
y_label = "Amount" 
title = "Test bar plot" 

plot = figure(plot_width=600, plot_height=300, 
     x_axis_label = x_label, 
     y_axis_label = y_label, 
     title=title 
     ) 

plot.vbar(source=source,x='x',top='y',bottom=0,width=0.3) 

def update(): 
     source.data = dict(
      x = dat.category, 
      y = dat.amount 
     ) 
     plot.x_range = source.data['x'] 

update() 

show(plot) 

私がフィギュア()の引数としてx_rangeを指定した場合に動作するようだが、私がやりたいことをできるようにすることですウィジェットの状態に応じてカテゴリ値を更新します。この場合、x_rangeをオンザフライで変更できるメカニズムが必要です。

私に修正をお願いします。

は、プロットを作成するとき、あなたはプロットがそれのx_rangeのための要因を取ることを定義する必要があなたに

答えて

2

ありがとうございます。

plot = figure(plot_width=600, plot_height=300, 
       x_axis_label=x_label, 
       y_axis_label=y_label, 
       title=title, 
       x_range=FactorRange(factors=list(dat.category)) 
      ) 

更新機能では、データを変更して、新しいカテゴリのx_rangeを再定義することができます。

def update(): 
     source.data = dict(
      x = dat.category, 
      y = dat.amount 
     ) 
     plot.x_range.factors = list(source.data['x']) 
+0

ありがとうございます。エラーはなくなりましたが、結果はx軸が 'A'、 'B'、 'C​​'ではなく数値(1,2,3)を取ります。 – Royalblue

+0

@Royalblue私の新しい編集の回答を見てください。それはあなたの問題を完全に解決するはずです。 – DuCorey

+0

ありがとうございます。今はとてもうまくいく! – Royalblue

関連する問題