Kev*_*vin 10 python matplotlib
以下是我正在编写的代码的精简版本,以制作带有多个子图的图形.问题出现在最后一行,fig.savefig("foo" + ".pdf", format='pdf').我收到以下错误:
AttributeError: "'NoneType' object has no attribute 'print_figure'"
Run Code Online (Sandbox Code Playgroud)
谁能告诉我什么是错的?谢谢!
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')
Run Code Online (Sandbox Code Playgroud)
小智 9
当使用fig.savefig()方法时,问题出在canvas上.此时pyplot附加到Canvas,但你的数字却没有.我同意你的观点,这是出乎意料的.如果您将图显式附加到Canvas,这不会成为问题.例如添加行:
fig.set_canvas(plt.gcf().canvas)
Run Code Online (Sandbox Code Playgroud)
将解决这个问题.所以你的整个代码将是:
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')
Run Code Online (Sandbox Code Playgroud)
你也可以使用pyplot自己的savefig方法,但我认为知道Canvas的图可能是一件好事.