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)
讓我們組數據:
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)
現在,創建要用於過濾和更新條形圖的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)
(我已經創建了一個問題,在GitHub上的滑塊顯示不正確的標籤,https://github.com/jupyter-widgets/ipywidgets/issues/1759),其持續
問題:
圖像寬度並在第一次更新後大小崩潰爲默認值(有沒有辦法將
%%opts
作爲參數給hv.Bars
?)y-Scale應保持不變(即,從0到150的所有更新)
有沒有關於更新速度的任何優化可能?
感謝您的任何幫助。