2017-07-18 94 views
1

我試圖將扇區列表中的所有11個扇區的圖保存爲1個pdf表。到目前爲止,下面的代碼給了我一張單獨的圖表(11個pdf頁面)。使用matplotlib在單個pdf頁面上保存多個圖

每日回報函數是我繪製的數據。每張圖上有兩行。

with PdfPages('test.pdf') as pdf: 
n=0 
for i in sectorlist: 
    fig = plt.figure(figsize=(12,12)) 
    n+=1 
    fig.add_subplot(4,3,n) 
    (daily_return[i]*100).plot(linewidth=3) 
    (daily_return['^OEX']*100).plot() 
    ax = plt.gca() 
    ax.set_ylim(0, 100) 
    plt.legend() 
    plt.ylabel('Excess movement (%)') 
    plt.xticks(rotation='45') 
    pdf.savefig(fig) 
plt.show() 

回答

2

不知道如果你的縮進是錯誤的只是在你的問題,但關鍵是你需要完成所有策劃的小樣方圖之前保存爲PDF格式。具體而言,您需要將fig = plt.figure(figsize=(12,12))pdf.savefig(fig)移至for循環外,並將它們保留在with聲明中。下面是一個例子從你的修改,它給你1個PDF頁面11個次要情節:

import matplotlib.pyplot as plt 
from matplotlib.backends.backend_pdf import PdfPages 
import numpy as np 

with PdfPages('test.pdf') as pdf: 
    t = np.arange(0.0, 2.0, 0.01) 
    s = 1 + np.sin(2*np.pi*t) 
    s = s * 50 

    fig = plt.figure(figsize=(12,12)) 
    n=0 
    for i in range(11): 
     n += 1 
     ax = fig.add_subplot(4,3,n) 
     ax.plot(t, s, linewidth=3, label='a') 
     ax.plot(t, s/2, linewidth=3, label='b') 
     ax.set_ylim(0, 100) 
     ax.legend() 
     ax.yaxis.set_label_text('Excess movement (%)') 
     plt.setp(ax.xaxis.get_ticklabels(), rotation='45') 
    pdf.savefig(fig) 
+0

也是我的數據有63天的滯後(滾動平均的BC),其中前63天也空值(因此空在圖上)。你知道如何擺脫這個? –

+0

@ thomas.mac你是什麼意思的「擺脫」? 'NaN'不會被繪製。如果你擔心'xlim',一個建議(雖然我不確定它是否最好)會使用['pandas.DataFrame.first_valid_index'](http://pandas.pydata.org/pandas-docs /stable/generated/pandas.DataFrame.first_valid_index.html#pandas.DataFrame.first_valid_index)找出第一個'NaN'。然後相應地更改'xlim'。 –

+0

我的圖形在半途中開始,因爲在左側是完全空的,只有右半部分是圖形 –

相關問題