2016-09-14 45 views
1

我试图用Matplotib创建多个单独的图块,然后将这些图块保存到一个PDF文档中。这里是我的代码:使用Matplotlib创建多个图块

pdf = matplotlib.backends.backend_pdf.PdfPages('Activity_Report.pdf') 

fig1 = plt.figure(1) 
fig1.figure(figsize=(11.69, 8.27)) 
ax1 = fig1.add_subplot(111) 


# ******** product 1 ******** 
ax1.plot(Prod_01['Date'], Prod_01['Orders'], marker='o', label='Orders', color='navy', linewidth='2') 
ax1.plot(Prod_01['Date'], Prod_01['Orders_MA'], linestyle='--', label='Orders (10-d)', color='darkblue', linewidth='2') 

ax1.plot(Prod_01['Date'], Prod_01['Volume'], marker='o', label='Volume', color='firebrick', linewidth='2') 
ax1.plot(Prod_01['Date'], Prod_01['Volume_MA'], linestyle='--', label='Volume (10-d)', color='firebrick', linewidth='2') 

ax1.plot(Prod_01['Date'], Prod_01['Pass'], marker='o', label='Pass', color='darkgreen', linewidth='2') 
ax1.plot(Prod_01['Date'], Prod_01['Pass_MA'], linestyle='--', label='Pass (10-d)', color='darkgreen', linewidth='2') 

ax1.plot(Prod_01['Date'], Prod_01['Request'], marker='o', label='Request', color='cyan', linewidth='2') 
ax1.plot(Prod_01['Date'], Prod_01['Request_MA'], linestyle='--', label='Request (10-d)', color='cyan', linewidth='2') 

ax1.set_title('Prod_01', fontsize='20', rasterized=True) 
ax1.tick_params(axis='both', which='major', labelsize='10') 
ax1.legend(loc='upper left', fontsize='10') 

ax1.get_yaxis().set_major_formatter(tkr.FuncFormatter(lambda x, p: format(int(x), ','))) 
ax1.xaxis.set_major_formatter(custom_x_axis_format) 

# ******** product 2 ******** 

fig2 = plt.figure(2) 
fig2.figure(figsize=(11.69, 8.27)) 
ax2 = fig2.add_subplot(111) 

ax2.plot(Prod_02['Date'], Prod_02['Order'], marker='o', label='Order', color='navy', linewidth='2') 
ax2.plot(Prod_02['Date'], Prod_02['Order_MA'], linestyle='--', label='Order (10-d)', color='darkblue', linewidth='2') 

ax2.plot(Prod_02['Date'], Prod_02['Volume'], marker='o', label='Volume', color='firebrick', linewidth='2') 
ax2.plot(Prod_02['Date'], Prod_02['Volume_MA'], linestyle='--', label='Volume (10-d)', color='firebrick', linewidth='2') 

ax2.plot(Prod_02['Date'], Prod_02['Pass'], marker='o', label='Pass', color='darkgreen', linewidth='2') 
ax2.plot(Prod_02['Date'], Prod_02['Pass_MA'], linestyle='--', label='Pass (10-d)', color='darkgreen', linewidth='2') 

ax2.plot(Prod_02['Date'], Prod_02['Request'], marker='o', label='Request', color='cyan', linewidth='2') 
ax2.plot(Prod_02['Date'], Prod_02['Request_MA'], linestyle='--', label='Request (10-d)', color='cyan', linewidth='2') 

ax2.set_title('Prod_02', fontsize='20', rasterized=True) 
ax2.tick_params(axis='both', which='major', labelsize='10') 
ax2.legend(loc='upper left', fontsize='10') 

ax2.get_yaxis().set_major_formatter(tkr.FuncFormatter(lambda x, p: format(int(x), ','))) 
ax2.xaxis.set_major_formatter(custom_x_axis_format) 


pdf.savefig() 
pdf.close() 

我遇到的问题是,这个代码打印到人物(而不是两个独立人物也就是说,product 1product 2在一个单一的数字绘制。 (即在彼此的顶部)。我试图用Figure()大独立地块(在StackOverflow上几个帖子可以看到),但似乎并没有工作。

这可能是因为我有fig1ax1fig2ax2已定义inco直接(对Python来说是新手,我仍然不明白他们的使用是100%)。

有没有人看到为什么这段代码生成一个单一的情节,而不是有意的两个独立的情节?

在此先感谢!

+0

那也许是因为你只调用pdf.savefig()一次? – benten

+0

您需要将这些数据专门保存到PDF中,例如'pdf.savefig(fig1)'和'pdf.savefig(fig2)' –

+0

谢谢您(@benten和@Paul H)纠正我的错误。代码现在按预期工作! – equanimity

回答

3

你的代码有点过于复杂。这两条线是多余的:

fig1 = plt.figure(1) 
fig1.figure(figsize=(11.69, 8.27)) 

我只是:

FIGSIZE = (11.69, 8.27) 
fig1, ax1 = plt.subplots(figsize=FIGSIZE) 
# plot things 

fig2, ax2 = plt.subplots(figsize=FIGSIZE) 
# plot more things 

# etc etc 

pdf = matplotlib.backends.backend_pdf.PdfPages('Activity_Report.pdf') 
for fig in [fig1, fig2, ...]: 
    pdf.savefig(fig) 

plt.close('all')