如何在 python 中绘制来自两个不同来源的在线数据?
How can I plot online data coming from two different sources in python?
我正在尝试以这种方式绘制来自两个不同来源的在线数据:
在每次迭代中:
1] 第一个来源:将传入数据添加到图表中。
2]第二个来源:删除以前的数据,只保留图中传入的数据。
我尝试了 plotly,但问题是数据一旦绘制就无法删除(我需要它来处理来自第二个来源的传入数据)。
更新:
受@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()
"delete" 已绘制数据的更简单方法是 重新绘制 数据。考虑将数据存储在列表中,您可以在列表中轻松添加或删除数据,然后在有更新时重新绘制。
将最新的 N 个点保存在列表中的一种简单方法是
def add_data (new_data, old_data, n): # keep n points
return (old_data + new_data)[-n:]
我正在尝试以这种方式绘制来自两个不同来源的在线数据:
在每次迭代中:
1] 第一个来源:将传入数据添加到图表中。
2]第二个来源:删除以前的数据,只保留图中传入的数据。
我尝试了 plotly,但问题是数据一旦绘制就无法删除(我需要它来处理来自第二个来源的传入数据)。
更新:
受@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()
"delete" 已绘制数据的更简单方法是 重新绘制 数据。考虑将数据存储在列表中,您可以在列表中轻松添加或删除数据,然后在有更新时重新绘制。
将最新的 N 个点保存在列表中的一种简单方法是
def add_data (new_data, old_data, n): # keep n points
return (old_data + new_data)[-n:]