我想通过实时重绘新曲线(100个点)来更新绘图。
这是可行的:
import time, matplotlib.pyplot as plt, numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
t0 = time.time()
for i in range(10000000):
x = np.random.random(100)
ax.clear()
ax.plot(x, color='b')
fig.show()
plt.pause(0.01)
print(i, i/(time.time()-t0))
但是只有~10 fps,看起来很慢。
在Matplotlib中执行此操作的标准方法是什么?
我已经阅读了How to update a plot in matplotlib和How do I plot in real-time in a while loop using matplotlib?,但是这两种情况是不同的,因为它们 * 在现有绘图中添加了一个新点 *。在我的用例中,我需要重新绘制所有内容并保留100个点。
1条答案
按热度按时间mkshixfv1#
我不知道有什么技术可以提高一个数量级。不过,你可以稍微增加FPS与
1.更新线数据,而不是使用
set_ydata
(和/或set_xdata
)创建新图1.使用
Figure.canvas.draw_idle()
代替Figure.canvas.draw()
(参见this question)。因此,我建议您尝试以下方法:
注意,正如@Bhargav在注解中提到的,更改matplotlib后端也会有所帮助(例如
matplotlib.use('QtAgg')
)。希望这能有所帮助。