使用辅助y轴绘制pandas列并将图表保存为单个pdf

时间:2018-03-22 15:02:48

标签: python pandas matplotlib

我正在尝试使用Pandas DataFrame列中的数据创建多个时间序列图。我想将所有这些图表保存到单个pdf文件中。挑战在于这些图表都具有次级y轴,其具有不同的比例(参见下面的Col Z)。我已经看到了将多个图表保存为pdf的示例,以及绘制带有辅助y轴的单个图表的示例,但不知道如何将两者合并。我的实际DataFrame有50列,因此手动操作会很乏味。提前谢谢。

以下是我的尝试:

df1 = pd.DataFrame(np.random.rand(10, 4))
df1.columns = ['A', 'B', 'C', 'Z']
date_range = pd.date_range('1/31/2011', periods=10, freq='M')
df1['Z'] = 100*df1['Z']
df1.plot(kind='line', subplots=True, secondary_y=['Z'])
#

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")
plt.figure()
for cols in df1.columns:
    df1.plot(y=cols, secondary_y=['Z'])
    pdf.savefig(fig)
pdf.close()

1 个答案:

答案 0 :(得分:0)

据我了解,我认为这正是你所尝试的。这将生成4个图表,每个图表中包含2个序列。系列ABC与系列Z一起绘制:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.backends.backend_pdf

df1 = pd.DataFrame(np.random.rand(10, 4))
df1.columns = ['A', 'B', 'C', 'Z']
date_range = pd.date_range('1/31/2011', periods=10, freq='M')
df1['Z'] = 100*df1['Z']
df1.plot(kind='line', subplots=True, secondary_y=['Z'])

with matplotlib.backends.backend_pdf.PdfPages("output.pdf") as pdf:
    for cols in df1.columns:
        ## plot 1
        fig, ax1 = plt.subplots()
        df1.plot(y=cols, ax=ax1, color='C1')
        ax1.legend(loc=2)
        ## plot 2
        ax2 = ax1.twinx()
        df1.plot(y='Z', ax=ax2)
        pdf.savefig()