Joy*_*oys 2 python python-3.x spyder holoviews
我在 Windows 上安装了 Anaconda 3.7。它适用于 Jupyter,但不适用于 Spyder。这段代码:
import holoviews as hv
import pandas as pd
import numpy as np
output_notebook ()
flora = pd.read_csv ('iris.csv')
hv.extension('bokeh')
frequencies, edges = np.histogram(flora['petal width'], bins = 5)
print(frequencies, edges)
hv.Histogram(frequencies, edges, label = 'Histogram')
Run Code Online (Sandbox Code Playgroud)
只返回值:
[49 8 41 29 23] [0.1 0.58 1.06 1.54 2.02 2.5 ]
WARNING:root:Histogram: Histogram edges should be supplied as a tuple along with the values, passing the edges will be deprecated in holoviews 2.0.
Run Code Online (Sandbox Code Playgroud)
是否可以在 Spyder 中查看直方图?
作为解决方法,您可以通过将 Holoviews 图形放入 Panel 对象中并调用.show()它来在浏览器中打开图形。
库面板可用于在浏览器中创建带有 Holoviews 图形的仪表板。
这是一个工作示例:
# library imports
import numpy as np
import pandas as pd
import holoviews as hv
hv.extension('bokeh', logo=False)
import panel as pn
# create sample data
data = np.random.normal(size=[50, 2])
df = pd.DataFrame(data, columns=['col1', 'col2'])
# create holoviews graph
hv_plot = hv.Points(df)
# display graph in browser
# a bokeh server is automatically started
bokeh_server = pn.Row(hv_plot).show(port=12345)
# stop the bokeh server (when needed)
bokeh_server.stop()
Run Code Online (Sandbox Code Playgroud)
另请参阅:
/sf/ask/4057977521/[][1]
或者,您可以将散景设置为渲染器的后端,然后使用bokeh.render.show(). 这将在浏览器中打开您的全息图:
import holoviews as hv
hv.extension('bokeh')
from bokeh.plotting import show
show(hv.render(your_holoviews_plot))
Run Code Online (Sandbox Code Playgroud)
holoviews 的美妙之处在于它允许您在现代基于浏览器的散景和古老的熟悉的matplotlib之间进行选择以显示其绘图(以及在某种程度上的绘图,主要用于 3D 绘图)。
Spyder 能够内联(即在 python 控制台本身或因为最近是他们的新绘图面板)或交互式(即在弹出窗口中 -存在多个后端,在所有 qt 中)呈现 matplotlib 图。您可以通过在 spyder ipython 控制台中键入%matplotlib inline或%matplotlib qt在这些之间切换。
这些后端将成为您的全息视图生成的 matplotlib 绘图的地方!
现在,您需要明确地告诉 holoviews 使用 matplotlib 作为后端来渲染绘图(我在下面提到的 holoview_object 可以是他们所谓的“元素”或它们的组合:布局、叠加、全息图...) . 你可以使用
matplotlib_fig = holoviews.render(holoview_object, backend='matplotlib')
Run Code Online (Sandbox Code Playgroud)
然后创建一个空的 matplotlib 图并破解其管理器以在您的默认 matplotlib 后端显示它:
dummy = plt.figure()
new_manager = dummy.canvas.manager
new_manager.canvas.figure = matplotlib_fig
fig.set_canvas(new_manager.canvas)
Run Code Online (Sandbox Code Playgroud)
使用上面的概念,我为自己制作了一些实用函数,以便在 spyder 中直接或从 holoviews 对象轻松显示 matplotlib 或散景图,随意使用它们:
import matplotlib.pyplot as plt
import bokeh as bk
import holoviews as hv
def mplshow(fig):
# create a dummy figure and use its
# manager to display "fig"
dummy = plt.figure()
new_manager = dummy.canvas.manager
new_manager.canvas.figure = fig
fig.set_canvas(new_manager.canvas)
def bkshow(bkfig, title=None, save=0, savePath='~/Downloads'):
if title is None: title=bkfig.__repr__()
if save:bk.plotting.output_file(f'{title}.html')
bk.plotting.show(bkfig)
def hvshow(hvobject, backend='matplotlib', return_mpl=True):
'''
Holoview utility which
- for dynamic display, interaction and data exploration:
in browser, pops up a holoview object as a bokeh figure
- for static instanciation, refinement and data exploitation:
in matplotlib current backend, pops up a holoview object as a matplotlib figure
and eventually returns it for further tweaking.
Parameters:
- hvobject: a Holoviews object e.g. Element, Overlay or Layout.
- backend: 'bokeh' or 'matplotlib', which backend to use to show figure
- return_mpl: bool, returns a matplotlib figure
'''
assert backend in ['bokeh', 'matplotlib']
if backend=='matplotlib' or return_mpl:
mplfig=hv.render(hvobject, backend='matplotlib')
if backend=='bokeh': bkshow(hv.render(hvobject, backend='bokeh'))
elif backend=='matplotlib': mplshow(mplfig)
if return_mpl: return mplfig
Run Code Online (Sandbox Code Playgroud)
总结:如果您希望在 spyder 绘图窗格(或 Python 控制台,如果您不使用他们的绘图窗格)中静态呈现您的绘图,请执行以下操作:
%matplotlib inline
hvshow(holoviews_object, 'matplotlib')
Run Code Online (Sandbox Code Playgroud)
如果您希望在交互式 qt 窗口中弹出您的绘图,请执行以下操作:
%matplotlib qt
hvshow(holoviews_object, 'matplotlib')
Run Code Online (Sandbox Code Playgroud)
如果你想在你的浏览器中弹出你的情节(即散景),也是交互式的,请执行以下操作:
hvshow(holoviews_object, 'bokeh')
Run Code Online (Sandbox Code Playgroud)
我喜欢 spyder(不仅仅是 jupyter 笔记本)和全息视图一样,我很高兴能够同时使用两者!