I'm trying to save the graphs of all 11 sectors from sectorlist to 1 pdf sheet. So far the code below gives me a graph on a separate sheet (11 pdf pages).
The daily return functions is the data I'm plotting. There are 2 lines on each graph.
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()
Not sure if your indentation is wrong just in your question, but the key is you need to finish plotting all subplots before save your fig as pdf. Specifically, you need to move fig = plt.figure(figsize=(12,12))
and pdf.savefig(fig)
outside your for
loop and keep them within your with
statement. Here is one example modified from yours, which gives you 1 pdf page with 11 subplots:
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)