调用pyplot.show()后保存图形会导致文件为空
以下示例代码生成一个简单的图,然后将其保存到“ fig1.pdf”,然后显示它,然后再次将其保存到“
fig2.pdf”。第一张图片看起来像预期的一样,但是第二张图片是空白的(包含白色正方形)。这到底是怎么回事?这条线plt.show()
显然弄乱了一些东西,但是我不知道该怎么办!
import numpy as npimport matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
y = x**2
plt.plot(x,y)
plt.savefig('fig1.pdf')
plt.show()
plt.savefig('fig2.pdf')
回答:
如果要在显示图形后保存图形,则需要保留图形实例。plt.savefig
调用后不起作用的原因show
是当前数字已被重置。
pyplot
跟踪show
幕后场景中哪些图形,轴等是“当前”(即尚未显示)。 gcf
和gca
等的 urrent
igure和电流 分别XES实例。
plt.savefig
(以及基本上任何其他pyplot
方法)都可以plt.gcf().savefig(...)
。换句话说,获取当前的图形实例并调用其savefig
方法。同样plt.plot
基本上没有plt.gca().plot(...)
。
show
调用之后,“当前”图形和轴的列表为空。
通常,最好直接使用图形和轴实例进行绘图/保存/显示/等,而不是使用plt.plot
,等隐式获取当前图形/轴并在其上绘图。使用pyplot
所有东西(尤其是交互方式)并没有什么错,但是它可以更轻松地拍摄自己的脚。
使用pyplot
对plt.show()
并产生一个数字和轴(多个)对象,但随后直接使用数字或轴的方法。(例如,ax.plot(x,
y)代替plt.plot(x,
y),等等)此方法的主要优点是它很明确。您知道要绘制的对象是什么,不必知道pyplot状态机的功能(尽管也不难理解状态机接口)。
作为“推荐”处理方式的示例,请执行以下操作:
import numpy as npimport 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 npimport 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')
以上是 调用pyplot.show()后保存图形会导致文件为空 的全部内容, 来源链接: utcz.com/qa/420357.html