如何在 Python 程序中从数据集中动态绘制现有点
How do I dynamically draw existing points from a data set in a Python program
我有这个 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 个点,如果可以,我该怎么做?我希望每个点每秒都被绘制。
这是您可以每隔 1 秒动态绘制 11 个点的一种方法
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)
我有这个 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 个点,如果可以,我该怎么做?我希望每个点每秒都被绘制。
这是您可以每隔 1 秒动态绘制 11 个点的一种方法
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)