2016-06-12 74 views
0

我想創建一個簡單的柱狀圖(如一個在官方公報示例頁面)散景11 - 簡單的分組條形圖與字典

我想在這個古老的答案執行代碼Plotting Bar Charts with Bokeh

但它顯示錯誤:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-2-ba53ce344126> in <module>() 
    11 
    12 bar = Bar(xyvalues, cat, title="Stacked bars", 
---> 13   xlabel="category", ylabel="language") 
    14 
    15 output_file("stacked_bar.html") 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/builders/bar_builder.pyc in Bar(data, label, values, color, stack, group, agg, xscale, yscale, xgrid, ygrid, continuous_range, **kw) 
    318  kw['y_range'] = y_range 
    319 
--> 320  chart = create_and_build(BarBuilder, data, **kw) 
    321 
    322  # hide x labels if there is a single value, implying stacking only 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/builder.pyc in create_and_build(builder_class, *data, **kws) 
    60  # create the new builder 
    61  builder_kws = {k: v for k, v in kws.items() if k in builder_props} 
---> 62  builder = builder_class(*data, **builder_kws) 
    63 
    64  # create a chart to return, since there isn't one already 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/builder.pyc in __init__(self, *args, **kws) 
    280 
    281    # handle input attrs and ensure attrs have access to data 
--> 282    attributes = self._setup_attrs(data, kws) 
    283 
    284    # remove inputs handled by dimensions and chart attributes 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/builder.pyc in _setup_attrs(self, data, kws) 
    331       attributes[attr_name].iterable = custom_palette 
    332 
--> 333     attributes[attr_name].setup(data=source, columns=attr) 
    334 
    335    else: 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/attributes.pyc in setup(self, data, columns) 
    193 
    194   if columns is not None and self.data is not None: 
--> 195    self.set_columns(columns) 
    196 
    197   if self.columns is not None and self.data is not None: 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/attributes.pyc in set_columns(self, columns) 
    185    # assume this is now the iterable at this point 
    186    self.iterable = columns 
--> 187    self._setup_default() 
    188 
    189  def setup(self, data=None, columns=None): 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/attributes.pyc in _setup_default(self) 
    142  def _setup_default(self): 
    143   """Stores the first value of iterable into `default` property.""" 
--> 144   self.default = next(self._setup_iterable()) 
    145 
    146  def _setup_iterable(self): 

/usr/local/lib/python2.7/dist-packages/bokeh/charts/attributes.pyc in _setup_iterable(self) 
    320 
    321  def _setup_iterable(self): 
--> 322   return iter(self.items) 
    323 
    324  def get_levels(self, columns): 

TypeError: 'NoneType' object is not iterable 

的公報例如沒有工作

網址:http://bokeh.pydata.org/en/0.11.0/docs/user_guide/charts.html#userguide-charts-data-types

from bokeh.charts import Bar, output_file, show 
from bokeh.sampledata.autompg import autompg as df 

p = Bar(df, label='yr', values='mpg', agg='median', group='origin', 
     title="Median MPG by YR, grouped by ORIGIN", legend='top_right') 

output_file("bar.html") 

show(p) 

,我不想用熊貓,我想用一個簡單的Python字典是這樣的:

my_simple_dict = { 
    'Group 1': [22,33,44,55], 
    'Group 2': [44,66,0,24], 
    'Group 3': [2,99,33,51] 
} 

我怎麼着achive條形圖,顯示了樹組(第1組,第2組,第3組),X軸從1到4?

注意:我使用Python 2.7

回答

0

bokeh.charts API專門創建與緊密結合,並與有用的工作大熊貓。如果你不想使用熊貓,我會建議稍微低一級的bokeh.plotting API,它可以讓你繪製條形圖(如rectquad字形),不過你喜歡。

這是潛在可能,像Bar圖表可以修改自動轉換像你這樣類型的字典成熊貓DataFrame小號內部。如果這似乎是一個有用的功能,我鼓勵你在GitHub跟蹤器上爲它提出功能請求。但bokeh.charts將永遠依賴熊貓,即使您不直接使用它。

+0

嗨@bigreddot,感謝您的回答。見http://bokeh.pydata.org/en/0.11.0/docs/reference/charts.html(section bar)是一個字典傳遞給一個酒吧。我無法實現的是一個分組情節(就像問題中的官方情節) –

0

現在我找到了解決辦法是改變字典結構

from bokeh.charts import Bar, output_file, show, hplot 
import pandas as pd 

my_simple_dict = { 
    'Group 1': [22,33,44,55], 
    'Group 2': [44,66,0,24], 
    'Group 3': [2,99,33,51] 
} 

my_data_transformed_dict = {} 

my_data_transformed_dict['x-axis'] = [] 
my_data_transformed_dict['value'] = [] 
my_data_transformed_dict['group-name'] = [] 
for group, group_list in my_simple_dict.iteritems(): 
    x_axis = 0 
    for item in group_list: 
     x_axis += 1 
     my_data_transformed_dict['x-axis'].append(x_axis) 
     my_data_transformed_dict['value'].append(item) 
     my_data_transformed_dict['group-name'].append(group) 

my_bar = Bar(my_data_transformed_dict, values='value',label='x-axis',group='group-name',legend='top_right') 

output_file("grouped_bar.html") 

show(my_bar) 

如果有人知道更好的方法請告訴我