2017-04-08 72 views
0

熊貓dataframe行對應卡爾曼濾波器的連續時間樣本。我想在流中顯示軌跡(真值,測量值和濾波器估計值)。新手:來自大熊貓的holoviews曲線跟進:流問題

def show_tracker(index,data=run_tracker()): 
    i = int(index) 
    sleep(0.1) 
    p = \ 
    hv.Scatter(data[0:i], kdims=['x'],  vdims=['y'])(style=dict(color='r')) *\ 
    hv.Curve (data[0:i], kdims=['x.true'], vdims=['y.true']) *\ 
    hv.Scatter(data[0:i], kdims=['x.est'], vdims=['y.est'])(style=dict(color='darkgreen')) *\ 
    hv.Curve (data[0:i], kdims=['x.est'], vdims=['y.est'])(style=dict(color='lightgreen')) 
    return p 

%%opts Scatter [width=600,height=280] 
ndx=TimeIndex() 
hv.DynamicMap(show_tracker, kdims=[], streams=[ndx]) 

for i in range(N): 
    ndx.update(index=i) 
  • 問題1:軸被自動設置到數據的邊界。因此,軌跡更新發生在繪圖邊界的邊緣。 有沒有設置允許一些slop, 還是我必須計算show_tracker函數中的適當邊界?

  • 問題2:散焦後端; 我可以縮放和平移,但 「重置」會導致數據集丟失。我如何解決這個問題?

  • 問題3:缺省數據參數show_tracker 要求的功能被重新執行以生成新的數據幀。 有沒有簡單的方法來解決這個問題?

+0

不客氣問題3: 高清_run(I):你會簡單地這樣做,如果我 %N == 0: _run.data = run_tracker(N,傳感器,跟蹤器) 返回_run.data _run.data = run_tracker(N)在 返回_run – user

+0

新增Jupyter筆記本https://github.com/ea42gh/KalmanFilter示例 – user

回答

0

1期

這是下星期的1.7版本的最後一個懸而未決的問題,跟蹤this issue更新之一。但是,我們也更改了動態地圖上範圍的更新方式,如果您想更新範圍,請確保在其中一個顯示的對象上設置%%opts Scatter {+framewise}norm=dict(framewise=True),因爲您已經對樣式選項進行了處理。

第2期

這是在背景虛化的重置工具的一個不幸的缺點,你可以更新跟蹤this issue

問題3:

這取決於你在做什麼,也該數據已經產生或者是你更新它的飛行?如果你只需要生成一次數據,你可以創建它的外部功能,這意味着它會在範圍:

data = run_tracker() 

def show_tracker(index): 
    i = int(index) 
    sleep(0.1) 
    ... 
    return p 

如果你真的想動態生成新的數據做的是編寫最簡單的事情一個小班來跟蹤狀態。你甚至可以讓這個類成爲Stream,所以你不必單獨定義它。下面是可能的樣子:

class KalmanTracker(hv.streams.Stream): 

    index = param.Integer(default=1) 

    def __init__(self, **params): 
     # Initializes empty data and parameters 
     self.data = None 
     super(KalmanTracker, self).__init__(**params) 

    def update_data(self, index): 
     # Update self.data here 

    def get_view(self, index): 
     # Update index exceeds data length and 
     # create a holoviews view of the data 
     if self.data is None or len(self.data) < index: 
      self.update_data(index) 
     data = self.data[:index] 
     .... 
     return hv_obj 

    def show(self): 
     # Create DynamicMap to display and 
     # pass in self as the Stream 
     return hv.DynamicMap(self.get_view, kdims=[], 
          streams=[self]) 

tracker = KalmanTracker() 
tracker.show() 

# Should update data and plot 
tracker.update(index=10) 

一旦你這樣做,你也可以使用paramnb庫生成從這個類的小部件。通過 高清rerun_tracker(N)替換數據= run_tracker()參數** ** show_tracker

tracker = KalmanTracker() 
paramnb.Widgets(tracker, callback=tracker.update) 
tracker.show() 
+0

不錯!我認爲** tracker.update **應該是** tracker.view **。我將在github上更新筆記本電腦 – user

+0

''tracker.update''是正確的,因爲它更新了Stream。順便提一下支持問題加入我們[Gitter](https://gitter.im/ioam/holoviews)。 – philippjfr

+0

使此接口啓動並運行。新版本 https://github.com/ea42gh/KalmanFilterExample/blob/master/KalmanFilterExampleV2.ipynb – user