如何提高python中的绘图速度?

时间:2011-09-21 16:19:47

标签: python plot matplotlib

我有一个256x256 numpy数组,不断被更改。在每次迭代中,我拍摄快照来制作电影。快照是使用matplotlib制作的三维表面图。

问题是绘图在每次迭代时花费的时间> 2秒,对于250次迭代来说约为600秒。我有相同的程序在MATLAB中运行,相同的迭代次数是80-120秒。

问题:有没有办法加快matplotlib三维表面绘图,还是有更快的python绘图工具?

以下是一些代码:

## initializing plot

fig = plt.figure(111)
fig.clf()
ax = fig.gca(projection='3d')
X = np.arange(0, field_size, 1)
Y = np.arange(0, field_size, 1)
X, Y = np.meshgrid(X, Y)

## the loop

start_time = time.time()
for k in xrange(250):
    it_time = time.time()
    field[128,128] = maxvalue
    field = scipy.ndimage.convolve(field, kernel)
    print k, " calculation: ", time.time() - it_time, " seconds"
    it_time = time.time()
    ax.cla()
    ax.plot_surface(X, Y, field.real, rstride=4, cstride=4, cmap=cm.hot,
        linewidth=0, antialiased=False)
    ax.set_zlim3d(-50, 150)
    filename = "out_%d.png" % k
    fig.savefig(filename)
    #fig.clf()
    print k, " plotting: ", time.time() - it_time, " seconds"
print "computing: ", time.time() - start_time, " seconds"

3 个答案:

答案 0 :(得分:2)

对于一般的3D绘图,我建议mayavi。起初可能有点令人生畏,但值得努力。

对于绘制三维数据的一个镜头,它肯定比matplotlib快得多。为了使用savefig调用多次绘图,我不确定......

答案 1 :(得分:0)

GNUplot (通过它的各种python interfaces访问)可能会更快。至少我几年前就认识一个与你有类似问题的人,在测试了一些他们使用GNUplot的软件包之后。但它并不像matplotlib那么好看。

另外,我假设您已关闭交互模式。

答案 2 :(得分:0)

我无法测试它是否有帮助,因为您没有提供可运行的示例,但您可以看到plot_surface返回的modifying the Poly3DCollection是否比每次创建新集合更快。

另外,您使用的是非交互式后端,对吗? (在导入pyplot之前调用matplotlib.use('agg')。)