2017-10-15 89 views
0

我想通過SelectionRangeSlider從Jupyter筆記本中的某些熊貓DataFrame中選擇數據,並使用holoviews條形圖繪製過濾的數據。如何更新holoviews使用ipywidgets SelectionRangeSlider的酒吧?

請看下面的例子:

import numpy as np 
import pandas as pd 
import datetime 
import holoviews as hv 
hv.extension('bokeh') 

import ipywidgets as widgets 

start = int(datetime.datetime(2017,1,1).strftime("%s")) 
end = int(datetime.datetime(2017,12,31).strftime("%s")) 

size = 100 
rints = np.random.randint(start, end + 1, size = size) 
df = pd.DataFrame(rints, columns = ['zeit']) 
df["bytes"] = np.random.randint(5,20,size=size) 
df['who']= np.random.choice(['John', 'Paul', 'George', 'Ringo'], len(df)) 
df["zeit"] = pd.to_datetime(df["zeit"], unit='s') 
df.zeit = df.zeit.dt.date 

df.sort_values('zeit', inplace = True) 
df = df.reset_index(drop=True) 
df.head(2) 

這使測試數據框dfenter image description here

讓我們組數據:

data = pd.DataFrame(df.groupby('who')['bytes'].sum()) 
data.reset_index(level=0, inplace=True) 
data.sort_values(by="bytes", inplace=True) 
data.head(2) 

enter image description here

現在,創建要用於過濾和更新條形圖的SelectionRangeSlider

%%opts Bars [width=800 height=400 tools=['hover']] 
def view2(v): 
    x = df[(df.zeit > r2.value[0].date()) & (df.zeit < r2.value[1].date())] 
    data = pd.DataFrame(x.groupby('who')['bytes'].sum()) 
    data.sort_values(by="bytes", inplace=True) 
    data.reset_index(inplace=True) 
    display(hv.Bars(data, kdims=['who'], vdims=['bytes'])) 

r2 = widgets.SelectionRangeSlider(options = options, index = index, description = 'Test') 
widgets.interactive(view2, v=r2) 

enter image description here

(我已經創建了一個問題,在GitHub上的滑塊顯示不正確的標籤,https://github.com/jupyter-widgets/ipywidgets/issues/1759),其持續

問題:

  • 圖像寬度並在第一次更新後大小崩潰爲默認值(有沒有辦法將%%opts作爲參數給hv.Bars?)

  • y-Scale應保持不變(即,從0到150的所有更新)

  • 有沒有關於更新速度的任何優化可能?

感謝您的任何幫助。

回答