Pandas / Matplotlib - 1个PDF上的多个图形,并将预先存在的图形/图形插入子图

时间:2014-06-06 21:31:54

标签: python matplotlib pandas

我试图在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])

感谢您的帮助。

0 个答案:

没有答案