我试图在PDF中显示一些matplotlib生成的图形。我想每页显示3个图表。
我有一个单独的函数,它生成这些图并返回一组图。我在一个页面上放置多个图表时遇到了麻烦。
这是我对saveAsPDF函数的尝试:
def saveAsPDF(fname, pltArray, lgdArray, lgd_bArray, txtArray):
from matplotlib.backends.backend_pdf import PdfPages
pp = PdfPages(fname)
numberGraphs = len(pltArray)
graphsPerPage = 3
numberPages = int(np.ceil(numberGraphs / float(graphsPerPage)))
gs1 = gridspec.GridSpec(graphsPerPage, 5)
fig1 = pltArray[0].gcf()
fig2 = pltArray[1].gcf()
fig3 = pltArray[2].gcf()
fig4 = pltArray[3].gcf()
fig5 = pltArray[4].gcf()
fig6 = pltArray[5].gcf()
figArray = [fig1, fig2, fig3, fig4, fig5, fig6]
for i in range(len(pltArray)):
# New page
if i % graphsPerPage == 0:
fig = plt.figure(figsize=(8.27, 11.69), dpi=100)
# Plot
ax = plt.subplot(gs1[i%3, :3])
fig = figArray[i]
fig.set_size_inches(6, 4)
# Close the page after it's full
if (i + 1) % graphsPerPage == 0 or (i + 1) == numberGraphs:
plt.tight_layout()
pp.savefig(fig, bbox_inches='tight',dpi=100)
plt.close('all')
pp.close()
我见过的所有示例都将多个图表放在PDF的一个页面上使用子图,但没有一个使用预先构建的图形。甚至可以在子图中显示预先建立的数字吗?我能做的最好的是每页打印一个:
plt.savefig(pp, format='pdf', bbox_inches='tight')
是否有一些内置函数可以将图形插入到gridspec子图中并调整大小以适应该子图?
这里是绘图数组生成的东西:
pltArray.append(plt)
lgdArray.append(lgd)
lgd_bArray.append(lgd_b)
txtArray.append(txt)
return pltArray, lgdArray, lgd_bArray, txtArray
和
for key, ts in tsDict.iteritems():
plots, legends, legends_b, text = retVolChart(1, ts, 20, key, [0], 'Reports')
for i in range(len(plots)):
pltArray.append(plots[i])
lgdArray.append(legends[i])
lgd_bArray.append(legends_b[i])
txtArray.append(text[i])
感谢您的帮助。