Python 使用matplotlib在单个pdf页面上保存多个绘图

Python 使用matplotlib在单个pdf页面上保存多个绘图,python,pandas,matplotlib,yahoo-finance,Python,Pandas,Matplotlib,Yahoo Finance,我试图将所有11个扇区的图表从sectorlist保存到1张pdf表格。到目前为止,下面的代码给了我一个单独的页面(11个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[

我试图将所有11个扇区的图表从sectorlist保存到1张pdf表格。到目前为止,下面的代码给了我一个单独的页面(11个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()

不确定你的缩进是否在你的问题中是错误的,但关键是你需要在将你的fig保存为pdf之前完成所有子图的绘制。具体来说,您需要将
fig=plt.figure(figsize=(12,12))
pdf.savefig(fig)
移动到
for
循环之外,并使用
语句将它们保持在
内。下面是一个修改自您的示例,它为您提供了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)

另外,我的数据有63天的延迟(滚动平均值的bc),其中前63天是空值(因此在图上是空的)。你知道怎么摆脱这个吗?@thomas.mac你说的“摆脱”是什么意思<代码>NaN
不会被打印。如果您担心
xlim
,一个建议(尽管我不确定它是否是最好的)是使用它来查找第一个
NaN
。然后相应地更改
xlim
。我的图形从一半开始,因为左侧完全为空,只有右侧为空graphing@thomas.mac这是x轴范围的自动设置。正如我所说,您可以使用
pandas.DataFrame.first\u valid\u index
first找出第一个非NaN值。然后,您可以相应地更改
xlim
,或者相应地修剪
DataFrame
。对于
系列
,您有。