之前,如果你想保存显示它后面的数字再次绘制它,你需要坚持图形实例。调用show
之后plt.savefig
不起作用的原因是当前数字已被重置。
pyplot
跟踪哪些数字,轴等是“当前”(即尚未与show
一起显示)的幕后。 gcf
和gca
分别获取当前图形和当前轴实例。 plt.savefig
(和基本上任何其他pyplot
方法)只是plt.gcf().savefig(...)
。换句话说,获取当前图形实例并调用它的savefig
方法。同样plt.plot
基本上是plt.gca().plot(...)
。
调用show
后,“当前”图形和坐标轴列表为空。
一般来说,最好直接使用figure和axes实例来绘制/保存/显示/ etc,而不是使用plt.plot
等来隐式地获取当前的图形/坐标轴和坐标图。使用pyplot
(尤其是交互式)使用pyplot
没有任何问题,但它可以让你更容易地在脚下拍摄自己。
对于plt.show()
使用pyplot
并生成图形和轴对象,但直接使用图形或轴方法。 (例如,ax.plot(x, y)
而不是plt.plot(x, y)
等)。这样做的主要优点是明确的。你知道你正在绘制什么对象,并且不必理解pyplot状态机的作用(尽管它也不难理解状态机接口)。
由于做事“推荐”的方式为例,做这样的事情:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
y = x**2
fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')
如果你想用的pyplot
接口的一切,然后就抓住数字实例调用show
前。例如:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
y = x**2
plt.plot(x, y)
fig = plt.gcf()
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')
编辑nm,找出这是非交互式 – tacaswell
+1,Joe。这,国际海事组织,说明为什么pyplot接口的使用应保持在最低限度。 –