python - 加快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 的情况下!
解决方案
切勿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)
推荐阅读
- java - 如何在运行时语言 (Java) 中插入图像
- kubernetes - Kubernetes 如何调度和部署 Pod?
- google-chrome - 提取 - 仅来自地址的数字
- c# - 如何在 Azure FunctionApp 中使用 Microsoft.Extensions.Logging.ILogger 作为类变量?
- node.js - AMQPLIB - NodeJS - 在 RabbitMQ 中断言一个惰性队列
- python - Jupyter Notebook 的终端命令未使用正确的 conda 环境
- javascript - 用户登录网站后如何显示空白页面?
- python - python 是否可以从现有数据框创建新数据框?
- java - 如何使用 azure Java Storage SDK V10 获取 blob Uri
- plugins - 如何自动删除结束标签