Holoviews条形图显示疑问:仅支持Jupyter?Shell环境如何查看?
首先明确说:Holoviews绝对不是只能在Jupyter Notebook中使用,它可以在常规Python Shell、独立Python脚本甚至其他交互式环境(比如IPython Shell)里运行,只是不同环境下渲染/查看图表的方式略有区别~
先看你给出的代码:
import numpy as np
import holoviews as hv
hv.extension('bokeh')
data = [('one',8),('two', 10), ('three', 16), ('four', 8), ('five', 4), ('six', 1)]
bars = hv.Bars(data, hv.Dimension('Car occupants'), 'Count')
print(bars)
这段代码在Jupyter里能直接渲染是因为Jupyter集成了Holoviews的渲染后端,会自动把Holoviews对象转换成可视化图形。但在普通Shell里运行的话,print(bars)只会输出对象的文本描述,不会显示图表,这时候可以用以下两种方式查看:
方法1:导出为HTML文件,用浏览器打开
你可以用Holoviews内置的hv.save()方法把图表导出成HTML文件,之后直接用浏览器打开这个文件就能看到条形图:
import numpy as np import holoviews as hv hv.extension('bokeh') data = [('one',8),('two', 10), ('three', 16), ('four', 8), ('five', 4), ('six', 1)] bars = hv.Bars(data, hv.Dimension('Car occupants'), 'Count') # 导出为HTML文件 hv.save(bars, 'bar_chart.html')
运行这段代码后,你的当前目录会生成一个bar_chart.html文件,直接双击它就能在浏览器里看到渲染好的条形图了。
方法2:用Bokeh的show()方法直接弹出窗口显示
因为你用的是Bokeh作为渲染后端,所以可以借助Bokeh的show()方法,先把Holoviews的图表对象转换成Bokeh的对象,然后直接弹出窗口显示:
import numpy as np import holoviews as hv from bokeh.io import show hv.extension('bokeh') data = [('one',8),('two', 10), ('three', 16), ('four', 8), ('five', 4), ('six', 1)] bars = hv.Bars(data, hv.Dimension('Car occupants'), 'Count') # 把Holoviews对象转为Bokeh对象并显示 show(hv.render(bars))
运行这段代码后,系统会自动弹出一个浏览器窗口,直接显示你的条形图。
另外补充一下,如果是IPython Shell的话,体验会更接近Jupyter,只要直接运行bars(不用print),就会自动渲染图表,因为IPython也支持Holoviews的交互式渲染~
内容的提问来源于stack exchange,提问作者Ozgur

