gpt4 book ai didi

Python实时绘图

转载 作者:太空狗 更新时间:2023-10-30 00:32:03 27 4
gpt4 key购买 nike

我获取了两个数组中的一些数据:一个用于时间,一个用于值。当我达到 1000 点时,我触发一个信号并绘制这些点(x=时间,y=值)。

我需要保持与之前绘图相同的数字,但只有一个合理的数字以避免减慢进程。例如,我想在图表上保留 10,000 个点。matplotlib 交互式绘图工作正常,但我不知道如何删除第一点,它很快就会减慢我的计算机速度。我查看了 matplotlib.animation,但它似乎只是重复相同的情节,并没有真正实现它。

我真的在寻找一个简单的解决方案,以避免任何减慢。

由于我采集了很长时间,所以我在每个循环中删除输入数据(第 1001 个点存储在第一行中,依此类推)。

这是我目前拥有的,但它保留了图表上的所有点:

import matplotlib.pyplot as plt

def init_plot():
plt.ion()
plt.figure()
plt.title("Test d\'acqusition", fontsize=20)
plt.xlabel("Temps(s)", fontsize=20)
plt.ylabel("Tension (V)", fontsize=20)
plt.grid(True)

def continuous_plot(x, fx, x2, fx2):
plt.plot(x, fx, 'bo', markersize=1)
plt.plot(x2, fx2, 'ro', markersize=1)
plt.draw()

我调用了一次 init 函数,continous_plot 在一个过程中,每当我的数组中有 1000 个点时调用。

最佳答案

您可能拥有的最简单的解决方案是替换现有绘图的 X 和 Y 值。 (或者只有 Y 值,如果你的 X 数据没有改变。一个简单的例子:

import matplotlib.pyplot as plt
import numpy as np
import time

fig = plt.figure()
ax = fig.add_subplot(111)

# some X and Y data
x = np.arange(10000)
y = np.random.randn(10000)

li, = ax.plot(x, y)

# draw and show it
ax.relim()
ax.autoscale_view(True,True,True)
fig.canvas.draw()
plt.show(block=False)

# loop to update the data
while True:
try:
y[:-10] = y[10:]
y[-10:] = np.random.randn(10)

# set the new data
li.set_ydata(y)

fig.canvas.draw()

time.sleep(0.01)
except KeyboardInterrupt:
break

这个解决方案也非常快。上面代码的最大速度是每秒重绘 100 次(受 time.sleep 限制),我得到大约 70-80,这意味着一次重绘大约需要 4 毫秒。但是 YMMV 取决于后端等。

关于Python实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783530/

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