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') 
相關問題