[Tutor] pdf generation problem

Peter Otten __peter__ at web.de
Sat Mar 4 02:51:55 EST 2017


Jason Snyder wrote:

> I have the following program where I am trying to generate a pdf:
> 
>       1 import matplotlib
>       2 matplotlib.use('AGG')
>       3 import matplotlib.pyplot as plt
>       4 import matplotlib.image as image
>       5 import matplotlib.gridspec as gridspec
>       6 from matplotlib.backends.backend_pdf import PdfPages
>       7 import numpy as np
>       8
>       9 np.random.seed(0)
>      10
>      11 x, y = np.random.randn(2, 100)
>      12
>      13 with PdfPages('wx_plot.pdf') as pdf:
>      14   fig, (ax1,ax2) = plt.subplots(nrows=2, figsize=(8,11))
>      15   gs = gridspec.GridSpec(2, 1,
>      16                     height_ratios=[1.5,3]
>      17                     )
>      18   ax1 = plt.subplot(gs[0])
>      19   ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2)
>      20   ax1.grid(True)
>      21   ax1.axhline(0, color='black', lw=2)
>      22
>      23   ax2 = plt.subplot(gs[1])
>      24   ax2.acorr(x, usevlines=True, normed=True, maxlags=50, lw=2)
>      25   ax2.grid(True)
>      26   ax2.axhline(0, color='black', lw=2)
>      27   pdf.savefig('fig')
>      28 pdf.close()
> 
> When I run it I get the following error:
> 
> Traceback (most recent call last):
>   File "testinger.py", line 13, in <module>
>     with PdfPages('wx_plot.pdf') as pdf:
> AttributeError: __exit__
> 
> 
> What is going on here and how do I resolve this issue?

You have an old version of matplotlib where the PdfPages class does not yet 
implement the context manager protocol. You can 

(1) upgrade the library. In that case line 28 is redundant; just do

with PdfPages(...) as pdf:
   # do stuff

(2) continue to use the version you have and close explicitly:

pdf = PdfPages(...)
# do stuff
pdf.close()




More information about the Tutor mailing list