pythonpandaspdfpages

Pivot table for loop multiple plots export using pdf pages


Using pdf pages below results in a pdf without the plots.
Is it possible to resolve this for plots from pivot tables?

import seaborn as sns
titanic = sns.load_dataset('titanic')

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("seaborn.pdf")

# Loop over list 's' for plots
with PdfPages(r'seaborn.pdf') as export_pdf:
    s = ['embark_town', 'class', 'embarked']
    for i in s:
        fig = plt.figure(figsize = [10, 5]);
        ax = titanic.pivot_table(values='fare', columns = i, index='sex', aggfunc='sum').plot()
        export_pdf.savefig(fig, bbox_inches='tight')


Solution

  • Use subplots to get both fig and ax then set the ax argument of DataFrame.plot:

    import seaborn as sns
    from matplotlib import pyplot as plt
    from matplotlib.backends.backend_pdf import PdfPages
    
    titanic = sns.load_dataset('titanic')
    
    pdf = PdfPages("seaborn.pdf")
    
    # Loop over list 's' for plots
    with PdfPages(r'seaborn.pdf') as export_pdf:
        s = ['embark_town', 'class', 'embarked']
        for i in s:
            fig, ax = plt.subplots(figsize=[10, 5])
            titanic.pivot_table(
                'fare', columns=i, index='sex', aggfunc='sum'
            ).plot(ax=ax)
            export_pdf.savefig(fig, bbox_inches='tight')
    
    

    Page 1:

    page 1

    Page 2:

    page 2

    Page 3:

    page 3