Bokeh:Python:无法获取Bokeh中条形图的HTML源代码

时间:2014-11-20 23:43:26

标签: python bokeh

我正在尝试从Bokeh条形图中检索用于嵌入的html代码。

此示例正常工作:     来自bokeh.resources导入CDN     来自bokeh.plotting导入圈     来自bokeh.embed import autoload_static

plot = circle([1,2], [3,4])

div = notebook_div(plot)
js, tag = autoload_static(plot, CDN, "some/path")

jkl = HTML(div)
print div

但是,如果我使用plot = Bar(...)尝试相同的代码,我会收到错误:

-----> div = notebook_div(plot)
'Bar' object has no attribute 'ref'

有没有更好的方法来实现这一目标,还是根本不支持?

1 个答案:

答案 0 :(得分:0)

Bokeh.charts界面直到Bokeh版本0.7.0提供了更高级别的抽象,然后绘图。它不会继承自Plot,因此无法直接替换绘图实例。那就是说Chart类型有一个底层的绘图对象,可以在这种情况下使用。它是懒洋洋地创建的,目前需要一些机器来使它可用于你的例子。有关图表的公开讨论,这很可能会在版本中更容易和更一致。

同时您可以使用以下方法(更改示例/图表中可以找到的条形图笔记本):

 from collections import OrderedDict
 import numpy as np
 from bokeh.charts import Bar
 from bokeh.sampledata.olympics2014 import data as original_data
 from IPython.core.display import HTML
 from bokeh.resources import CDN
 from bokeh.plotting import circle
 from bokeh.embed import autoload_static, notebook_div

 data = {d['abbr']: d['medals'] for d in original_data['data'] if d['medals']['total'] > 0}

 countries = sorted(data.keys(), key=lambda x: data[x]['total'], reverse=True)

 gold = np.array([data[abbr]['gold'] for abbr in countries], dtype=np.float)
 silver = np.array([data[abbr]['silver'] for abbr in countries], dtype=np.float)
 bronze = np.array([data[abbr]['bronze'] for abbr in countries], dtype=np.float)

 medals = OrderedDict(bronze=bronze, silver=silver, gold=gold)

 bar = Bar(medals, countries, title="grouped, dict_input", 
 xlabel="countries", ylabel="medals", legend=True, width=800, 
 height=600)
 bar.show()

 plot = bar.chart.plot
 div = notebook_div(plot)
 js, tag = autoload_static(plot, CDN, "some/path")

 jkl = HTML(div)
 print div