Python 调用pyplot.show()后保存图形将导致一个空文件
下面的示例代码生成一个简单的绘图,然后将其保存到“fig1.pdf”,然后显示它,然后再次将其保存到“fig2.pdf”。第一个图像看起来与预期的一样,但第二个图像是空白的(包含一个白色正方形)。这里到底发生了什么?行Python 调用pyplot.show()后保存图形将导致一个空文件,python,matplotlib,Python,Matplotlib,下面的示例代码生成一个简单的绘图,然后将其保存到“fig1.pdf”,然后显示它,然后再次将其保存到“fig2.pdf”。第一个图像看起来与预期的一样,但第二个图像是空白的(包含一个白色正方形)。这里到底发生了什么?行plt.show()显然把事情搞砸了,但我不知道是什么/怎么搞的 import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1, 1, 100) y = x**2 plt.plot(x,y) plt.sa
plt.show()
显然把事情搞砸了,但我不知道是什么/怎么搞的
import numpy as np
import 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.show(block=False)
之后,保存到fig2.pdf将起作用,或者您可以在保存之前再次打印它
plt.plot(x,y)
plt.savefig('fig2.pdf')
在关闭时阻止并破坏情节。你可以用
plt.show(block=False)
之后,保存到fig2.pdf将起作用,或者您可以在保存之前再次打印它
plt.plot(x,y)
plt.savefig('fig2.pdf')
如果要在显示地物后保存地物,则需要保留地物实例。调用
show
后,plt.savefig
无法工作的原因是当前图形已重置
pyplot
跟踪哪些图形、轴等在幕后是“当前的”(即尚未使用show
显示)gcf
和gca
g分别设置当前cfigure和当前axes实例plt.savefig
(以及基本上任何其他pyplot
方法)只执行plt.gcf().savefig(…)
。换句话说,获取当前地物实例并调用其savefig
方法。类似地,plt.plot
基本上是plt.gca().plot(…)
调用show
后,“当前”图形和轴的列表为空
通常,最好直接使用figure和axes实例来打印/保存/显示/etc,而不是使用plt.plot
等隐式获取当前图形/轴并在其上打印。使用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
之前,只需抓取figure实例即可。例如:
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')
如果要在显示地物后保存地物,则需要保留地物实例。调用
show
后,plt.savefig
无法工作的原因是当前图形已重置
pyplot
跟踪哪些图形、轴等在幕后是“当前的”(即尚未使用show
显示)gcf
和gca
g分别设置当前cfigure和当前axes实例plt.savefig
(以及基本上任何其他pyplot
方法)只执行plt.gcf().savefig(…)
。换句话说,获取当前地物实例并调用其savefig
方法。类似地,plt.plot
基本上是plt.gca().plot(…)
调用show
后,“当前”图形和轴的列表为空
通常,最好直接使用figure和axes实例来打印/保存/显示/etc,而不是使用plt.plot
等隐式获取当前图形/轴并在其上打印。使用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
之前,只需抓取figure实例即可。例如:
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')
我必须运行
plt.cla()
和plt.clf()
才能绘制第二个。分别清除当前轴和当前绘图。在绘制第二个轴之前,我必须运行plt.cla()
和plt.clf()
。分别清除当前轴和当前绘图。如果您只想在保存前查看图形,可以调用
plt.ion()
在绘图之前,其中,和。这主要消除了调用plt.show()
的需要。您不再需要关闭这些数字才能继续
要再次禁用交互模式,请调用
plt.ioff()
如果您只想在保存前查看图形,可以调用
plt.ion()
在绘图之前,其中,和。这主要消除了调用plt.show()
的需要。您不再需要关闭这些数字才能继续
要再次禁用交互模式,请调用
plt.ioff()
这不是block
所控制的,因为这是值得的<代码>块控制gui工具包的主循环是否会阻止进一步的执行或在单独的线程中运行。这不是block
控制的,因为这是值得的<代码>块控制是否