python - 使用matplotlib在单个pdf页面上保存多个图

标签 python pandas matplotlib yahoo-finance

我正在尝试将所有11个扇区的图形从扇区列表保存到1张pdf表中。到目前为止,下面的代码在单独的纸上为我提供了一张图形(11 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()

最佳答案

不确定只是在您的问题中您的缩进是否错误,但是关键是您需要先完成所有子图的绘制,然后再将无花果另存为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)

关于python - 使用matplotlib在单个pdf页面上保存多个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157243/

相关文章:

python - 如何比较Python字典列表的无序相同性?

Python 根据条件创建基于现有列的列

python - 如何从字典的字典中绘制分组条形图

python - 用箭头标记 matplotlib 直方图 bin

python - matplotlib plot_surface 带有非线性颜色图的 3D 图

python - 使用带有用户输入的循环通过 python 下载图像列表

python - 如何以与setuptools相同的方式在bitbake配方中使用setuptools3存储pyc文件?

python - 如何在 python 中使用 Pandas 数据框按特定日期和时间进行过滤

python - 如何将一个DataFrame随机拆分成几个更小的DataFrame?

python - 在matplotlib中绘制相关图