首页 > 解决方案 > 加快python中的动画线图

问题描述

在我的研究中,我经常使用 matlab 脚本来动画化函数随时间的演变,纯粹是为了可视化目的。我目前正在将我的代码转移到 python,并且无法实现与 matlab 提供的相同的动画速度。

我尝试使用 matplotlib.pyplot 在 python 中实现相同的脚本,并使用几乎相同的代码结构。我也知道 matplotlib.animation.Animation 框架,但是我无法获得理想的性能。有一些明显的解决方法(即,减少向量中的点数,以更大的步长进行迭代等),但是我真的很感兴趣 python 是否可以在这个特定的应用程序中匹配 matlab 的性能。

这是matlab中的脚本:

line = plot(0,0,'k','linewidth',2);
x=0:0.05:4*pi;
y=sin(x);
axis([min(x) max(x) min(y) max(y)])
for k=1:length(x)
    set(line,'XData',x(1:k),'YData',y(1:k))
    pause(0.0001)
end 

这是我在python中的实现:

import matplotlib.pyplot as plt
import numpy as np
import time
x = np.arange(0, 4*np.pi, 0.05)
y = np.sin(x)
fig = plt.figure()
plt.ion()
ax = fig.add_subplot(111)
line, = ax.plot(0, 0, 'k', linewidth=2)
ax.set_xlim([np.min(x), np.max(x)])
ax.set_ylim([np.min(y), np.max(y)])
plt.show()
for k in range(len(x)):
    line.set_data(x[:k], y[:k])
    fig.canvas.draw()
    time.sleep(0.0001)

理想情况下,python 动画将与 matlab 使用相同类型的代码架构和参数一样快。我的直觉是 plt.ion() 或 fig.canvas.draw() 正在减慢 python 脚本的速度。这里的任何帮助都将不胜感激,当然,在这里展示 python 可以匹配 matlab 的性能只是建立在为什么现在没有人应该再使用 matlab 的情况下!

标签: pythonmatlabmatplotlibanimation

解决方案


切勿time.sleep在交互式情节中使用。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 4*np.pi, 0.05)
y = np.sin(x)
fig = plt.figure()
plt.ion()
ax = fig.add_subplot(111)
line, = ax.plot(0, 0, 'k', linewidth=2)
ax.set_xlim([np.min(x), np.max(x)])
ax.set_ylim([np.min(y), np.max(y)])

plt.draw()

for k in range(len(x)):
    line.set_data(x[:k], y[:k])
    plt.pause(0.0001)

推荐阅读