【发布时间】:2012-10-14 07:27:36
【问题描述】:
我正在使用由 400 个子图组成的 matplotlib 创建几个 pdf 图。每个只有 5 个数据点。在一台好电脑上保存 5 张 pdf 图片需要 420 秒。有什么办法可以优化代码还是matplotlib正常?
绘图部分代码:
plot_cnt = 1
for k in np.arange(K_min, K_max + 1):
for l in np.arange(L_min, L_max + 1):
ax = plt.subplot(grid[0], grid[1], plot_cnt)
plot_cnt += 1
plt.setp(ax, 'frame_on', False)
ax.set_ylim([-0.1, 1.1])
ax.set_xlabel('K={},L={}'.format(k, l), size=3)
ax.set_xlim([-0.1, 4.1])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')
ax.plot(np.arange(5), (data['S1']['Azimuth'][:, k - 1, l + offset_l] + \
data['S1']['Delta Speed'][:, k - 1, l + offset_l] + \
data['S1']['Speed'][:, k - 1, l + offset_l]) / 3,
'r-o', ms=1, mew=0, mfc='r')
ax.plot(np.arange(5), data['S2'][case][:, k - 1, l + offset_l],
'b-o', ms=1, mew=0, mfc='b')
plt.savefig(os.path.join(os.getcwd(), 'plot-average.pdf'))
plt.clf()
print 'Final plot created.'
最终图片:
【问题讨论】:
-
400 个子图对我来说似乎很多。即使你没有很多数据,matplotlib 也可能不会被优化来显示这种网格。
-
@Simon,是否可以使用单个大子图进行绘图?然后每五个应该连接。有什么想法吗?
-
我没有合适的环境来运行测试,但是您可以做一些事情。第一步是在您的代码上运行分析器(有关更多信息,请参阅here)。有了这个,你可以找到时间花在哪里。您可以尝试的两件事是在每个步骤中找到一些要释放的资源,或者使用multiprocessing 在多个进程中创建图。如果我有时间我会试试这个,但现阶段我不能保证任何事情
-
@rowman 我实现了你的想法,即使用一个大的
axes。
标签: python performance matplotlib