优化matplotlib pyplot:为多个小绘图打印

2024-09-28 22:36:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想拍一部电影,把一些绘制好的点四处移动,进行初步的交通模拟。不过,密谋要花很多时间——10帧需要7秒!!怎么回事?在

Python代码:

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

def slowww_plot():
    for i in range(10):
        plt.plot(0, 0, 'bo')
        plt.savefig('%03i.png' % i)
        plt.clf()
        plt.plot(0, 0, 'ro')   
        plt.savefig('%03i.png' % (i+1))
        plt.clf()

cProfile.run('slowww_plot()', sort = 'cumulative'

生产

^{pr2}$

我如何优化这一点?我尝试过使用PdfPages后端,并从有状态包装器切换到仅使用Axis.plot,但一切仍然很慢。在


Tags: 代码import电影plotpngas时间绘制
2条回答

如果你想要动画的话,你的效率很低。在

不要每次都做一个新图形,只需设置新数据并重新绘制现有图形。在

例如:

import matplotlib.pyplot as plt
import numpy as np

xy = 100 * np.random.random((2,10))
x, y = xy

fig, ax = plt.subplots()
points, = ax.plot(x, y, 'bo')

for i in range(10):
    xy += np.random.random(xy.shape) - 0.5
    points.set_data(xy)
    fig.savefig('%03i.png' % i)

您可能对matplotlib(1.1.0)新的animation feature感兴趣。下面是他们网站上的一个例子,展示了如何制作一个简单的动画:

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

def update_line(num, data, line):
    line.set_data(data[...,:num])
    return line,

fig1 = plt.figure()
data = np.random.rand(2, 25)
l, = plt.plot([], [], 'r-')
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.xlabel('x')
plt.title('test')
line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
    interval=50, blit=True)
line_ani.save('lines.mp4')

相关问题 更多 >