У меня есть данные в реальном времени, сгенерированные скриптом, который генерирует значения x, y1, y2, где x является последовательным, а
-10
Мне нужно отобразить значения y1, y2 в точечной диаграмме, где я вижу только последние 3 входа. Я также хочу обновить этот сюжет в режиме реального времени, используя FuncAnimation.
Идея состоит в том, что при просмотре 3 точек на экране каждое значение должно быть распознаваемым по дате. Последний (i) может быть красного и большого размера, (i-1) желтого и среднего размера и (i-2) зеленого и маленького размера.
data_gen.py:
import csv
import random
import time
X = 0
Y = 0
Y2 = 0
fieldnames = ["X", "Y", "Y2"]
with open('data.csv', 'w') as csv_file:
csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
csv_writer.writeheader()
while True:
with open('data.csv', 'a') as csv_file:
csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
info = {
"X": X,
"Y": Y,
"Y2": Y2
}
csv_writer.writerow(info)
print(X, Y, Y2)
X += 1
Y = random.randint(-10, 10)
Y2 = random.randint(-10, 10)
time.sleep(1)
Test.py:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
import pandas as pd
def main():
numframes = 100
numpoints = 10
color_data = np.random.random((numframes, numpoints))
plt.style.use('fivethirtyeight')
data = pd.read_csv('data.csv')
x,y1,y2 = data['X'],data['Y'], data['Y2']
y1 = y1[-3:]
y2 = y2[-3:]
x_ = x.to_numpy()
y1_ = y1.to_numpy()
y2_ = y2.to_numpy()
y1_ = y1_.reshape(-1, 1)
y2_ = y2_.reshape(-1, 1)
y_tot= np.hstack((y1_,y2_))
fig = plt.figure()
scat = plt.scatter(y1_, y2_,color='red')
axes = plt.gca()
axes.set_xlim(-14, 14)
axes.set_ylim(-14,14)
ani = animation.FuncAnimation(fig, update_plot,interval=1000, frames=range(numframes),fargs=(color_data, scat))
plt.show()
def update_plot(i, data, scat):
data = pd.read_csv('data.csv')
x,y1,y2 = data['X'],data['Y'], data['Y2']
y1 = y1[-3:]
y2 = y2[-3:]
x_ = x.to_numpy()
y1_ = y1.to_numpy()
y2_ = y2.to_numpy()
y1_ = y1_.reshape(-1, 1)
y2_ = y2_.reshape(-1, 1)
y_tot= np.hstack((y1_,y2_))
'''Set de values'''
scat.set_offsets(y_tot)
'''Set de color'''
# scat.set_array(data[i])
'''Set de tamaño'''
# scat.set_sizes(scat.get_sizes()*2)
return scat,
main()
Я не знаю, как поступить. Как и сейчас, я могу отобразить последние 3 обновленных значения, сгенерированных в .csv, но не могу сказать, какое из них является последним.
, если я сделаю что-то вроде
plt.plot(y1_[0],y2_[0],'r',y1_[1],y2_[1],'y',y1_[2],y2_[2],'g')
внутри Функция анимации?
Спасибо!