我有一个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"
答案 0 :(得分:2)
对于一般的3D绘图,我建议mayavi。起初可能有点令人生畏,但值得努力。
对于绘制三维数据的一个镜头,它肯定比matplotlib快得多。为了使用savefig调用多次绘图,我不确定......
答案 1 :(得分:0)
GNUplot (通过它的各种python interfaces访问)可能会更快。至少我几年前就认识一个与你有类似问题的人,在测试了一些他们使用GNUplot的软件包之后。但它并不像matplotlib那么好看。
另外,我假设您已关闭交互模式。
答案 2 :(得分:0)
我无法测试它是否有帮助,因为您没有提供可运行的示例,但您可以看到plot_surface
返回的modifying the Poly3DCollection
是否比每次创建新集合更快。
另外,您使用的是非交互式后端,对吗? (在导入pyplot之前调用matplotlib.use('agg')
。)