2016-08-31 33 views
1

datetimeスライダーを使ってiPyWidgetを構築する簡単な方法があるのだろうかと思います。今では、整数または浮動小数点範囲(例えば、1〜10、小数点以下0.01,0.02、...)にスライドするのは簡単です。日付スライダー付きのiPyWidget?

日付を浮動小数点数または整数に変換し、これらを使って何らかの種類のスライダを作成し、スライダの表示ラベルの日付に戻すことができると思います。しかし、これは厄介なようです。誰かがよりスムーズなソリューションを持っていますか?

答えて

5

最近同じ問題が発生しました。私は自分のクラスを作成してdaterange pickerを行う必要がありました。ここに私のコードは次のようになります。それを使用して

import pandas as pd 
import ipywidgets as widgets 
from IPython.display import display 

class DateRangePicker(object): 
    def __init__(self,start,end,freq='D',fmt='%Y-%m-%d'): 
     """ 
     Parameters 
     ---------- 
     start : string or datetime-like 
      Left bound of the period 
     end : string or datetime-like 
      Left bound of the period 
     freq : string or pandas.DateOffset, default='D' 
      Frequency strings can have multiples, e.g. '5H' 
     fmt : string, defauly = '%Y-%m-%d' 
      Format to use to display the selected period 

     """ 
     self.date_range=pd.date_range(start=start,end=end,freq=freq) 
     options = [(item.strftime(fmt),item) for item in self.date_range] 
     self.slider_start = widgets.SelectionSlider(
      description='start', 
      options=options, 
      continuous_update=False 
     ) 
     self.slider_end = widgets.SelectionSlider(
      description='end', 
      options=options, 
      continuous_update=False, 
      value=options[-1][1] 
     ) 

     self.slider_start.on_trait_change(self.slider_start_changed, 'value') 
     self.slider_end.on_trait_change(self.slider_end_changed, 'value') 

     self.widget = widgets.Box(children=[self.slider_start,self.slider_end]) 

    def slider_start_changed(self,key,value): 
     self.slider_end.value=max(self.slider_start.value,self.slider_end.value) 
     self._observe(start=self.slider_start.value,end=self.slider_end.value) 

    def slider_end_changed(self,key,value): 
     self.slider_start.value=min(self.slider_start.value,self.slider_end.value) 
     self._observe(start=self.slider_start.value,end=self.slider_end.value) 

    def display(self): 
     display(self.slider_start,self.slider_end) 

    def _observe(self,**kwargs): 
     if hasattr(self,'observe'): 
      self.observe(**kwargs) 

def fct(start,end): 
    print start,end 

は比較的簡単です:

w=DateRangePicker(start='2016-08-02',end="2016-09-02",freq='D',fmt='%Y-%m-%d') 
w.observe=fct 
w.display() 

ありがとうございました;-)

+0

をお楽しみください!これはうまくいった。コードを実行するために必要なものをすべてインポートするために、コードにいくつかの行を追加しました。共有してくれてありがとう: – atkat12

+0

よろしくお願いします。 – sweetdream

+0

@sweetdreamこのエラーが発生しました: "AttributeError: 'DateRangePicker'オブジェクトに 'slider_start_changed'属性がありません。" – Tickon

関連する問題