2016-09-14 4 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입니다. (에 StackOverflow에 대한 몇 가지 게시물에서 볼 때) (즉, 서로의 상단에). 나는 Figure()를 사용하여 큰 별도의 플롯을 시도했지만 그 작동하지 않습니다.

그것은 내가 가진 가능성이 높습니다 fig1, ax1, fig2ax2은 inco로 정의됩니다. rrectly (Python을 처음 접했을 때, 나는 여전히 그들의 사용법을 100 % 이해하지 못한다).

이 코드가 의도 된 두 개의 별도 플롯 대신 단일 플롯을 생성하는 이유는 누구나 알 수 있습니까?

미리 감사드립니다.

+0

은 당신이 한 번만) (pdf.savefig를 부르는 될 수 있을까? – benten

+0

'pdf.savefig (fig1)'및'pdf.savefig (fig2)'와 같이 수치를 PDF에 구체적으로 저장해야합니다. –

+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') 
관련 문제