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



下面是我正在编写的一个代码的精简版本,该代码用于制作一个包含多个子图的图形。问题出现在最后一行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')

使用图savefig()方法时,画布出现问题。此时,pyplot已附加到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方法,但我认为Figure了解Canvas可能是一件好事。

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

最新更新