plt.gcf() 不显示以前的情节实例
plt.gcf() doesn't show previous instance of a plot
我想将一个绘图实例保存到一个对象中,以便稍后只需调用该对象即可显示它。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
plt.plot(x, y1, linewidth=1, color = 'deepskyblue')
fig1 = plt.gcf()
plt.plot(x, y2, linewidth=1, color = 'red')
fig2 = plt.gcf()
在这个例子中,我首先画了一条蓝线 (y1=x) 并使用 plt.gcf()
将这个绘图的实例保存在 fig1
中。然后我在图中添加一条红色曲线 (y2=sin(x)) 并再次使用 plt.gcf()
将此图保存在 fig2
中。现在,我希望当我调用 fig1
时我只会得到蓝线,而当我调用 fig2
时我会得到两条线。像这样(我在 Jupyter 中):
fig1 # or fig1.show() if not in Jupyter
只有蓝色曲线
fig2
两条曲线
但是,实际上,当我调用 fig1
和 fig2
时,它们都显示两条曲线(如第二张图片)。有人可以帮助我如何正确获取每个图的实例,以便我以后可以随时显示它们吗?
您需要通过在代码中设置 plot.show()
来强制 matplotlib 实际绘制图形:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
plt.plot(x, y1, linewidth=1, color = 'deepskyblue')
plt.show()
fig1 = plt.gcf()
plt.plot(x, y2, linewidth=1, color = 'red')
plt.show()
fig2 = plt.gcf()
使用函数 plt.plot()
始终绘制到当前轴(如果不存在轴,则创建一个新轴)。
您还可以明确告诉 matplotlib 打开一个新图形:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
# open first figure
fig1 = plt.figure()
# plot
plt.plot(x, y1, linewidth=1, color = 'deepskyblue')
# open second figure
fig2 = plt.figure()
#plot
plt.plot(x, y2, linewidth=1, color = 'red')
虽然这已经解决了您的问题,但使用这样的面向对象版本被认为是一种很好的做法:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
# open first figure, axis
fig1, ax1 = plt.subplots()
# plot
ax1.plot(x, y1, linewidth=1, color = 'deepskyblue')
# open second figure, axis
fig2, ax2 = plt.subplots()
#plot
ax2.plot(x, y2, linewidth=1, color = 'red')
在所有情况下,您将获得:
现在,为什么在其他方法中不需要 plt.show()
?嗯,matplotlib通过显式的新建一个figure/axis,很明显之前的坐标轴已经画完了,可以画了
最后一种方法是最清楚的,因为您可以准确地说出您正在考虑的是哪个图形和哪个轴。
我想将一个绘图实例保存到一个对象中,以便稍后只需调用该对象即可显示它。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
plt.plot(x, y1, linewidth=1, color = 'deepskyblue')
fig1 = plt.gcf()
plt.plot(x, y2, linewidth=1, color = 'red')
fig2 = plt.gcf()
在这个例子中,我首先画了一条蓝线 (y1=x) 并使用 plt.gcf()
将这个绘图的实例保存在 fig1
中。然后我在图中添加一条红色曲线 (y2=sin(x)) 并再次使用 plt.gcf()
将此图保存在 fig2
中。现在,我希望当我调用 fig1
时我只会得到蓝线,而当我调用 fig2
时我会得到两条线。像这样(我在 Jupyter 中):
fig1 # or fig1.show() if not in Jupyter
只有蓝色曲线
fig2
两条曲线
但是,实际上,当我调用 fig1
和 fig2
时,它们都显示两条曲线(如第二张图片)。有人可以帮助我如何正确获取每个图的实例,以便我以后可以随时显示它们吗?
您需要通过在代码中设置 plot.show()
来强制 matplotlib 实际绘制图形:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
plt.plot(x, y1, linewidth=1, color = 'deepskyblue')
plt.show()
fig1 = plt.gcf()
plt.plot(x, y2, linewidth=1, color = 'red')
plt.show()
fig2 = plt.gcf()
使用函数 plt.plot()
始终绘制到当前轴(如果不存在轴,则创建一个新轴)。
您还可以明确告诉 matplotlib 打开一个新图形:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
# open first figure
fig1 = plt.figure()
# plot
plt.plot(x, y1, linewidth=1, color = 'deepskyblue')
# open second figure
fig2 = plt.figure()
#plot
plt.plot(x, y2, linewidth=1, color = 'red')
虽然这已经解决了您的问题,但使用这样的面向对象版本被认为是一种很好的做法:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)
# open first figure, axis
fig1, ax1 = plt.subplots()
# plot
ax1.plot(x, y1, linewidth=1, color = 'deepskyblue')
# open second figure, axis
fig2, ax2 = plt.subplots()
#plot
ax2.plot(x, y2, linewidth=1, color = 'red')
在所有情况下,您将获得:
现在,为什么在其他方法中不需要 plt.show()
?嗯,matplotlib通过显式的新建一个figure/axis,很明显之前的坐标轴已经画完了,可以画了
最后一种方法是最清楚的,因为您可以准确地说出您正在考虑的是哪个图形和哪个轴。