Как динамически рисовать существующие точки из набора данных в программе Python - PullRequest
2 голосов
/ 09 мая 2020

У меня есть этот Python скрипт для динамического обновления диаграммы по мере добавления значений в файл csv:


import numpy as np
from itertools import count
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

plt.style.use('fivethirtyeight')

x_vals = []
y_vals = []

index = count()


def animate(i):
    data = pd.read_csv('csv_data.csv')
    x = data['x_value']
    y1 = data['total_1']
    y2 = data['total_2']

    plt.cla()
    plt.plot(x, y1, label='Channel 1')
    plt.plot(x, y2, label='Channel 2')

    plt.legend(loc='upper left')

    plt.tight_layout()


ani = FuncAnimation(plt.gcf(), animate, frames=np.arange(0, 11, 0.1), interval=1000)

plt.show()

Вот как мои данные csv изначально выглядят:

x_value,total_1,total_2
0,1000,1000
1,1002,1001
2,1004,999
3,1006,1004
4,1002,1003
5,999,1003
6,1003,1001
7,1011,1004
8,1008,1000
9,1010,1000
10,1012,999

Если я запускаю свою программу, диаграмма появляется со всеми 11 точками для каждой линии и динамически добавляет каждую новую после этого. Можно ли отредактировать этот код, чтобы начальные 11 точек отображались динамически при запуске программы, и если да, то как мне это сделать? I wi sh для каждой точки, отображаемой каждую секунду.

1 Ответ

1 голос
/ 09 мая 2020

Это один из способов получить 11 точек для динамического рисования с интервалом в 1 секунду

import numpy as np
from itertools import count
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

plt.figure()

data = pd.read_csv('csv_data.csv')
x = data['x_value']
y1 = data['total_1']
y2 = data['total_2']

line1 = plt.plot(x[0], y1[0], 'ok', lw=1.5, label='Channel 1',color='black')
line2 = plt.plot(x[0], y2[0], '+', lw=1.5, label='Channel 2',color='red')
plt.title('Channels', fontsize=16)
plt.ylabel('Channel', fontsize=12)
plt.xlabel('x_value', fontsize=12)

plt.ion()   # set interactive mode
plt.show()
for i, item in data.iterrows():

    line1 = plt.plot(x[i], y1[i], 'ok', lw=1.5,color='black')
    line2 = plt.plot(x[i], y2[i], '+', lw=1.5,color='red')
    plt.legend()
    plt.gcf().canvas.draw()
    plt.pause(1)
...