0

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

此示例运行良好: from bokeh.resources import CDN from bokeh.plotting import circle from 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'

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

4

1 回答 1

0

Bokeh.charts 接口直到 Bokeh 版本 0.7.0 提供比绘图更高级别的抽象。它不从 Plot 继承,因此不能直接替换绘图实例。也就是说,图表类型有一个可以在这种情况下使用的底层绘图对象。它是懒惰地创建的,目前需要一些机器来使其对您的示例可用。有关图表的公开讨论很可能会在版本中变得更容易和更一致。

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

 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
于 2015-01-07T23:57:24.870 回答