2017-04-08 35 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