0

pandas 数据帧行对应于卡尔曼滤波器的连续时间样本。我想在流中显示轨迹(真相、测量和过滤器估计)。

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:轴自动设置为数据的边界。因此,轨迹更新发生在绘图边界的最边缘。是否有允许一些倾斜的设置,或者我必须在show_tracker函数中计算适当的界限?

  • 问题 2:Bokeh 后端;我可以缩放和平移,但“重置”会导致数据集丢失。我该如何解决?

  • 问题 3: show_tracker的默认数据参数 要求重新执行该函数以生成新的数据帧。有没有简单的方法来解决这个问题?

4

1 回答 1

0

第一期

这是下周即将发布的 1.7 版本的最后一个未决问题之一,请跟踪此问题以获取更新。但是,我们也只是更改了在 DynamicMap 上更新范围的方式,如果您想更新范围,请确保设置%%opts Scatter {+framewise}norm=dict(framewise=True)在显示的对象之一上,就像您已经为样式选项所做的那样。

第 2 期

这是散景中重置工具的一个不幸缺点,您可以跟踪此问题以进行更新。

问题 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库从此类生成小部件。你只需这样做:

tracker = KalmanTracker()
paramnb.Widgets(tracker, callback=tracker.update)
tracker.show()
于 2017-04-09T11:42:18.210 回答