The following is a stripped-down version of a code I am writing to make a figure with several subplots. The problem arises in the last line, fig.savefig("foo" + ".pdf", format='pdf'). I get the following error:
AttributeError: "'NoneType' object has no attribute 'print_figure'"
Can anyone tell me what's wrong? Thanks!
import matplotlib.pyplot as plt
from pdb import set_trace as st
import numpy as np
Time   = np.array([0,1,2,3,4])
Load   = np.array([1,2,3,4,5])
Cell   = np.array([6,9,2,5,4])
axialLoadDueToCellPressure = 5.5 * Cell
volumePlotFormat = 'double-wide'
fig = plt.Figure()
ax1 = plt.subplot2grid((3,2), (0,0))
ax1.plot((Time/1000/60),
    (Load + axialLoadDueToCellPressure)/6, 'k-')
ax1.plot((Time/1000/60), Cell, 'k--')
st()
fig.savefig("foo" + ".pdf", format='pdf')
                The problem is with the canvas, when using the fig.savefig() method. At this point pyplot is attached to a Canvas, but your figure does not. I agree with you that this is rather unexpected. This wouldn't be a problem if you were explicitly attaching the Figure to a Canvas. For instance adding the line:
fig.set_canvas(plt.gcf().canvas)
Will fix this issue. So your entire code would be:
import matplotlib.pyplot as plt
from pdb import set_trace as st
import numpy as np
Time   = np.array([0,1,2,3,4])
Load   = np.array([1,2,3,4,5])
Cell   = np.array([6,9,2,5,4])
axialLoadDueToCellPressure = 5.5 * Cell
volumePlotFormat = 'double-wide'
fig = plt.Figure()
fig.set_canvas(plt.gcf().canvas)
ax1 = plt.subplot2grid((3,2), (0,0))
ax1.plot((Time/1000/60),
    (Load + axialLoadDueToCellPressure)/6, 'k-')
ax1.plot((Time/1000/60), Cell, 'k--')
fig.savefig("foo3" + ".pdf", format='pdf')
You could also use pyplot's own savefig method, but I think that the Figure knowing about the Canvas is probably a good thing on the whole.
fig.savefig() is the problem. You need to use plt.savefig(), the fig class has no savefig() attribute.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With