Python 现场心电图实时散点图显示混乱,如何清理?
我有一些数据字典,我已经成功地让python实时更新并绘制了它们。得到线是可以做到的,但现在我需要绘制一个散点图。我不知道如何设置实时更新数据,以使我可以绘制x2和y5,基本上,我习惯于分离每个数据集,因此目前我有散射2(x2)和散射5(y5)分别更新,但如何将它们绘制在一起,例如ax.散射(x2,y5),而不是ax.散射(x2)和另一条ax.散射线(y5)?同时绘制它们,但单独绘制会得到一个填充过多的散点图(可能它也保存了太多的值),并且它似乎没有以与成功绘制的信号相同的速度移动Python 现场心电图实时散点图显示混乱,如何清理?,python,animation,real-time,scatter,Python,Animation,Real Time,Scatter,我有一些数据字典,我已经成功地让python实时更新并绘制了它们。得到线是可以做到的,但现在我需要绘制一个散点图。我不知道如何设置实时更新数据,以使我可以绘制x2和y5,基本上,我习惯于分离每个数据集,因此目前我有散射2(x2)和散射5(y5)分别更新,但如何将它们绘制在一起,例如ax.散射(x2,y5),而不是ax.散射(x2)和另一条ax.散射线(y5)?同时绘制它们,但单独绘制会得到一个填充过多的散点图(可能它也保存了太多的值),并且它似乎没有以与成功绘制的信号相同的速度移动 import
import heartpy as hp
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from collections import deque
from matplotlib.ticker import FuncFormatter
#from . import config
sample_rate = 40
def init(): # initialization function: plot the background of each frame
line.set_ydata([np.nan]*len(x))
line1.set_ydata([np.nan]*len(x1))
scatter2.set_xdata([np.nan]*len(x2))
# scatter3.set_ydata([np.nan]*len(x3))
# scatter4.set_ydata([np.nan]*len(x4))
scatter5.set_ydata([np.nan]*len(y5))
return line, line1, scatter2, scatter5, #scatter4, scatter5
def animate(i):
read_fname = 'temp.1D'
datax = np.loadtxt('temp.1D')
wd, m = hp.process(datax, 40 ) #run analysis
hr = wd['hr']
rm = wd['rolling_mean']
yb = wd['ybeat']
pl = wd['peaklist']
rp = wd['removed_beats']
rp_y = wd['removed_beats_y']
#pl=ax.collections[pl].get_array()
yhr = np.array(hr[:])
yrm = np.array(rm[:])
yyb = np.array(yb[:])
ypl = np.array(pl[:])
yrp = np.array(rp[:])
yrp_y = np.array(rp_y[:])
yhr = np.concatenate([yhr])
yrm = np.concatenate([yrm])
yyb = np.concatenate([yyb])
ypl = np.concatenate([ypl])
yrp = np.concatenate([rp])
yrp_y = np.concatenate([rp_y])
data.extend(yhr)
data1.extend(yrm)
data2.extend(ypl)
# data3.extend(yrp)
# data4.extend(yrp_y)
data5.extend(yyb)
line.set_ydata(data)
line1.set_ydata(data1)
scatter2.set_xdata(data2)
# scatter3.set_ydata(data3)
# scatter4.set_ydata(data4)
scatter5.set_ydata(data5)
print(yhr)
print(yrm)
print(ypl)
print()
return line, line1, scatter2, scatter5, #scatter4, scatter5
max_x = 250
max_y = 1700
#max_x2 = 1000
#max_y5 = 1000
data = deque(np.zeros(max_x),maxlen=max_x)
data1 = deque(np.zeros(max_x),maxlen=max_x)
data2= deque(np.zeros(max_x),maxlen=max_x)
#data3 = deque(np.zeros(max_x),maxlen=max_x)
#data4 = deque(np.zeros(max_x),maxlen=max_x) #hold the last 10 values
data5 = deque(np.zeros(max_y),maxlen=max_y)
x = np.arange(0,max_x)
x1 = np.arange(0,max_x)
x2 = np.arange(0,max_x)
#x3 = np.arange(0,max_x)
#x4 = np.arange(0,max_x)
y5 = np.arange(0,max_y)
fig, ax = plt.subplots()
#fig, ax1 = plt.subplots()
ax.set_ylim(-500, max_y)
ax.set_xlim(0, max_x-1)
line, = ax.plot(x, np.linspace(0,1000,250,endpoint = False))
line1, = ax.plot(x1, np.linspace(0,1000,250,endpoint = False))
#ax = plt.gca()
scatter2, = ax.plot(x2, marker="o", ls="", color = "green")
#scatter3, = ax.scatter(x3, np.linspace(0,50,1000))
#scatter4 = ax.scatter(x4, np.linspace(0,50,1000))
scatter5, = ax.plot(y5, marker="o", ls="")
#ax.grid()
#ax.relim()
#ax.autoscale_view(True,True,True)
ax.xaxis.set_major_formatter(FuncFormatter(lambda x, pos: '{:.0}s'.format(max_x -x -990)))
plt.xlabel('Seconds ago')
ani = animation.FuncAnimation(fig,animate,init_func=init,interval=25,blit=True,save_count = 10)
plt.show()