Анимированный точечный график с точками разных цветов и размеров каждый - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть данные в реальном времени, сгенерированные скриптом, который генерирует значения 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')

внутри Функция анимации?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...