Matplotlib子图 - savefig()不会输出PDF。 “NoneType”错误

时间:2014-02-20 15:56:16

标签: python matplotlib

以下是我正在编写的代码的精简版本,以制作带有多个子图的图形。问题出现在最后一行fig.savefig("foo" + ".pdf", format='pdf')。我收到以下错误:

AttributeError: "'NoneType' object has no attribute 'print_figure'"

谁能告诉我什么是错的?谢谢!

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')

2 个答案:

答案 0 :(得分:8)

当使用fig.savefig()方法时,问题在于画布。此时pyplot附加到Canvas,但你的数字却没有。我同意你的观点,这是出乎意料的。如果您将图显式附加到Canvas,这不会成为问题。例如,添加以下行:

fig.set_canvas(plt.gcf().canvas)

将解决此问题。所以你的整个代码将是:

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')

你也可以使用pyplot自己的savefig方法,但我认为图中了解Canvas可能是一件好事。

答案 1 :(得分:4)

fig.savefig()是问题所在。您需要使用plt.savefig()fig类没有savefig()属性。