2017-07-18 14 views
1

sectorlistから1 pdfシートまでの11セクタすべてのグラフを保存しようとしています。これまでのところ、以下のコードは私に別紙のグラフを提供しています(11 pdfページ)。matplotlibを使用して1つのpdfページに複数のプロットを保存する

日次リターン機能は、私がプロットしているデータです。各グラフには2行あります。

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としてあなたの図を保存するプロットを完了する必要がある場合はわかりません。具体的には、forループの外側にfig = plt.figure(figsize=(12,12))pdf.savefig(fig)を移動し、withステートメント内に保持する必要があります。ここでは11個のサブプロットであなたの1つのPDFページを与え、あなたからの変更の一例は、次のとおりです。

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日間は、空の値であり、63日遅れ(ローリング平均のBC)、(したがって、空を持っていますグラフ上に)。あなたはこれを取り除く方法を知っていますか? –

+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

グラフが途中から始まり、左側が完全に空で、右半分だけがグラフ化しています –

関連する問題