2017-07-18 91 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

我的图形在半途中开始,因为在左侧是完全空的,只有右半部分是图形 –

相关问题