1

我第一次尝试Holoviews,我想重现这个动画的“Gapminder”情节,如here所述。Holoviews示例:如何在Jupyter笔记本中显示情节?

该代码运行,但我不知道如何处理输出,以便它显示在Jupyter Notebook(我认为这是可能的,因为Jupyter可以显示任意的HTML)。

# Get HoloViews plot and attach document 
doc = curdoc() 
hvplot = BokehRenderer.get_plot(hvgapminder, doc) 

# Make a bokeh layout and add it as the Document root 
plot = layout([[hvplot.state], [slider, button]], sizing_mode='fixed') 
doc.add_root(plot) 

具体来说,我该怎么办与得到dochvplot对象?

回答

2

该特定示例结合了HoloView和散景组件以及散景小部件都无法在笔记本中轻松与Python进行通信。但是,您可以使用holoviews的“洗刷器”小工具来实现同样的功能:

import pandas as pd 
import numpy as np 
import holoviews as hv 
from bokeh.sampledata import gapminder 

hv.extension('bokeh') 

# Switch to sending data 'live' and using the scrubber widget 
%output widgets='live' holomap='scrubber' 

# Declare dataset 
panel = pd.Panel({'Fertility': gapminder.fertility, 
        'Population': gapminder.population, 
        'Life expectancy': gapminder.life_expectancy}) 
gapminder_df = panel.to_frame().reset_index().rename(columns={'minor': 'Year'}) 
gapminder_df = gapminder_df.merge(gapminder.regions.reset_index(), on='Country') 
gapminder_df['Country'] = gapminder_df['Country'].astype('str') 
gapminder_df['Group'] = gapminder_df['Group'].astype('str') 
gapminder_df.Year = gapminder_df.Year.astype('f') 
ds = hv.Dataset(gapminder_df) 

# Apply dimension labels and ranges 
kdims = ['Fertility', 'Life expectancy'] 
vdims = ['Country', 'Population', 'Group'] 
dimensions = { 
    'Fertility' : dict(label='Children per woman (total fertility)', range=(0, 10)), 
    'Life expectancy': dict(label='Life expectancy at birth (years)', range=(15, 100)), 
    'Population': ('population', 'Population') 
} 

# Create Points plotting fertility vs life expectancy indexed by Year 
gapminder_ds = ds.redim(**dimensions).to(hv.Points, kdims, vdims, 'Year') 

# Define annotations 
text = gapminder_ds.clone({yr: hv.Text(1.2, 25, str(int(yr)), fontsize=30) 
          for yr in gapminder_ds.keys()}) 

# Define options 
opts = {'plot': dict(width=1000, height=600,tools=['hover'], size_index='Population', 
        color_index='Group', size_fn=np.sqrt, title_format="{label}"), 
     'style': dict(cmap='Set1', size=0.3, line_color='black', alpha=0.6)} 
text_opts = {'style': dict(text_font_size='52pt', text_color='lightgray')} 


# Combine Points and Text 
(gapminder_ds({'Points': opts}) * text({'Text': text_opts})).relabel('Gapminder Demo') 
相关问题