2

我有这个 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 个点,如果可以,我该怎么做?我希望每一秒都能画出每一点。

4

1 回答 1

1

这是您可以获得 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)
于 2020-05-09T00:59:26.713 回答