0

この方法で、2 つの異なるソースからのオンライン データをプロットしようとしています。

各反復で:

1] 最初のソース: 入力データをグラフに追加します。

2] 2 番目のソース: 前のデータを削除し、グラフ内の受信データのみを保持します。

プロットしようとしましたが、問題は、プロットされたデータを削除できないことです(2番目のソースからの受信データにはこれが必要です)。

アップデート:

@WakkaDojo の回答に触発されたのは、malplotlib.animationを使用した最終的なコードです。

import numpy as np
import matplotlib.pyplot as plt
from pylab import *
import matplotlib.animation as animation
import random
from sklearn.datasets.samples_generator import make_blobs

fig = plt.figure()#figsize=(7,4), dpi=100

ylim(0,20)
xlim(0,20)

def data_gen():
    centers = [[15, 15],[5, 5]]
    for i in range(1000):
        X, _ = make_blobs(n_samples=2, centers=centers, cluster_std=1.0,center_box=(-1, 1))
        print i
        yield float(X[0][0]), float(X[0][1]), float(X[1][0]), float(X[1][1])


updated_source_1, = plot([], [], linestyle='none', marker='o', color='g')
updated_source_2, = plot([], [], linestyle='none', marker='o', color='r')

ax = gca()

source_1_xdata, source_1_ydata = [], []
source_2_xdata, source_2_ydata = [0], [0]


def run(data):
    x0,y0,x1,y1 = data

    # remove previous plotted data

    source_2_xdata.remove(xdata1[len(xdata1)-1])
    source_2_ydata.remove(ydata1[len(ydata1)-1])

    # append new data

    source_1_xdata.append(x0)
    source_1_ydata.append(y0)
    source_2_xdata.append(x1)
    source_2_ydata.append(y1)
    updated_source_1.set_data(source_1_ydata, source_1_xdata)
    updated_source_2.set_data(source_2_ydata, source_2_xdata)
    return updated_source_1, updated_source_2,

ani = animation.FuncAnimation(fig, run, data_gen, interval=100)
plt.show()
4

1 に答える 1

1

既にプロットされたデータを「削除」するより簡単な方法は、データを再プロットすることです。データを簡単に追加または削除できるリストにデータを保存し、更新が入ったら再プロットすることを考えてみてください。

最新の N ポイントをリストに保持する簡単な方法は次のとおりです。

def add_data (new_data, old_data, n): # keep n points
    return (old_data + new_data)[-n:]
于 2015-04-18T23:25:11.543 に答える