如何从Python程序中的数据集动态绘制现有点

如何从Python程序中的数据集动态绘制现有点,python,python-3.x,matplotlib,matplotlib-animation,Python,Python 3.x,Matplotlib,Matplotlib Animation,我使用此Python脚本在csv文件中添加值时动态更新图表: 将numpy作为np导入 从itertools导入计数 作为pd进口熊猫 将matplotlib.pyplot作为plt导入 从matplotlib.animation导入FuncAnimation plt.style.use('fivethirtyeight')) x_vals=[] y_vals=[] 索引=计数() 定义动画(i): data=pd.read\u csv('csv\u data.csv')) x=数据['x_值

我使用此Python脚本在csv文件中添加值时动态更新图表:


将numpy作为np导入
从itertools导入计数
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
从matplotlib.animation导入FuncAnimation
plt.style.use('fivethirtyeight'))
x_vals=[]
y_vals=[]
索引=计数()
定义动画(i):
data=pd.read\u csv('csv\u data.csv'))
x=数据['x_值']
y1=数据['总计1']
y2=数据['total_2']
plt.cla()
plt.绘图(x,y1,标签='Channel 1')
plt.绘图(x,y2,标签='Channel 2')
plt.图例(位置='左上')
plt.紧_布局()
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点?如果可以,我该如何做?我希望每秒钟绘制一个点。

这是一种让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)

我假设您可以使用一个切片作为第一个
n
点。因此,在初始化
y2
之后,可以缩进所有内容,并在范围(10):plt.plot(x[n:],y1[n:],label='Channel 1')中为n创建一个类似
的循环。也许吧。这似乎只为每条线绘制了前3个点,然后窗口崩溃了。我正在试图找出是什么导致它崩溃。
对于我,enumerate(data)中的项:
循环遍历每一列而不是每一行。由于只有3列,这就是它结束的原因。我如何循环通过每一行?啊!做出了改变。这应该在行上循环。@runnerpul如果这个答案有助于解决您的问题,您需要检查绿色标记。这将有助于将注意力集中在未回答的问题上。干杯。我选择了
作为I,data.iterrows()中的行:
,但你的答案很好。谢谢你的帮助。