gpt4 book ai didi

python - 实时更新 matplotlib 图形以进行数据采集

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:34 28 4
gpt4 key购买 nike

我想在 matplotlib 中实时绘制数据。我想在程序开始时打开一个图形,然后在获取新数据时更新该图形。尽管存在一些类似的问题,但没有一个完全回答我的具体问题。

我希望每组数据点 new_data1 和 new_data2 在每个 while 循环结束时绘制在同一个图形上,即第一个 while 循环后的一行,第二个 while 循环后同一个图形上的两条线等。目前它们都绘制在一起,但仅在程序结束时绘制,这对于实时数据采集没有用处。

import matplotlib.pyplot as plt
import numpy


hl, = plt.plot([], [])

def update_line(hl, new_datax, new_datay):
hl.set_xdata(numpy.append(hl.get_xdata(), new_datax))
hl.set_ydata(numpy.append(hl.get_ydata(), new_datay))
plt.xlim(0, 50)
plt.ylim(0,200)
plt.draw()

x = 1
while x < 5:
new_data1 = []
new_data2 = []
for i in range(500):
new_data1.append(i * x)
new_data2.append(i ** 2 * x)
update_line(hl, new_data1, new_data2)
x += 1

else:
print("DONE")

该程序绘制所有 5 条线,但在程序末尾。我希望在 while 循环完成后,将每一行依次绘制出来。我尝试在函数中放入 plt.pause(0.001),但没有成功。

这个程序与已经提出的程序不同——那个程序只绘制一张图并且不随时间更新。

最佳答案

如果我正确理解了您的规范,您可以稍微修改您的 MWE,如下所示:

import matplotlib.pyplot as plt
import numpy

fig = plt.figure(figsize=(11.69,8.27))
ax = fig.gca()
ax.set_xlim(0, 50)
ax.set_ylim(0,200)

hl, = plt.plot([], [])

def update_line(hl, new_datax, new_datay):
# re initialize line object each time if your real xdata is not contiguous else comment next line
hl, = plt.plot([], [])
hl.set_xdata(numpy.append(hl.get_xdata(), new_datax))
hl.set_ydata(numpy.append(hl.get_ydata(), new_datay))

fig.canvas.draw_idle()
fig.canvas.flush_events()

x = 1
while x < 10:
new_data1 = []
new_data2 = []
for i in range(500):
new_data1.append(i * x)
new_data2.append(i ** 2 * x)
update_line(hl, new_data1, new_data2)
# adjust pause duration here
plt.pause(0.5)
x += 1

else:
print("DONE")

显示:

rendering

关于python - 实时更新 matplotlib 图形以进行数据采集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com