plt.close() 将关闭当前实例。
plt.close(2) 将关闭图 2
plt.close(plot1) 将用实例 plot1 关闭图形
plt.close('all') 将关闭所有火线
找到here。
记住plt.show() 是一个阻塞 函数,所以在您上面使用的示例代码中,plt.close() 在窗口关闭之前不会被执行,这使得它变得多余。
您可以在代码开头使用plt.ion() 使其成为非阻塞代码,尽管这有其他含义。
示例
在我们在 cmets 中讨论之后,我整理了一些示例来演示如何使用绘图功能。
下面我创建了一个情节:
fig = plt.figure(figsize=plt.figaspect(0.75))
ax = fig.add_subplot(1, 1, 1)
....
par_plot, = plot(x_data,y_data, lw=2, color='red')
在这种情况下,上面的ax 是一对轴的句柄。每当我想对这些轴做某事时,我可以通过调用 axes(ax) 将我当前的一组轴更改为这个特定的组。
par_plot 是 line2D 实例的句柄。这被称为艺术家。如果我想改变线条的一个属性,比如改变ydata,我可以通过引用这个句柄来实现。
我还可以通过执行以下操作来创建滑块小部件:
axsliderA = axes([0.12, 0.85, 0.16, 0.075])
sA = Slider(axsliderA, 'A', -1, 1.0, valinit=0.5)
sA.on_changed(update)
第一行为滑块创建了一个新坐标区(称为axsliderA),第二行创建了一个滑块实例sA,它被放置在坐标区中,第三行指定了当滑块值时调用的函数更改 (update)。
我的更新函数可能如下所示:
def update(val):
A = sA.val
B = sB.val
C = sC.val
y_data = A*x_data*x_data + B*x_data + C
par_plot.set_ydata(y_data)
draw()
par_plot.set_ydata(y_data) 使用句柄 par_plot 更改 Line2D 对象的 ydata 属性。
draw() 函数更新 当前 轴集。
把它们放在一起:
from pylab import *
import matplotlib.pyplot as plt
import numpy
def update(val):
A = sA.val
B = sB.val
C = sC.val
y_data = A*x_data*x_data + B*x_data + C
par_plot.set_ydata(y_data)
draw()
x_data = numpy.arange(-100,100,0.1);
fig = plt.figure(figsize=plt.figaspect(0.75))
ax = fig.add_subplot(1, 1, 1)
subplots_adjust(top=0.8)
ax.set_xlim(-100, 100);
ax.set_ylim(-100, 100);
ax.set_xlabel('X')
ax.set_ylabel('Y')
axsliderA = axes([0.12, 0.85, 0.16, 0.075])
sA = Slider(axsliderA, 'A', -1, 1.0, valinit=0.5)
sA.on_changed(update)
axsliderB = axes([0.43, 0.85, 0.16, 0.075])
sB = Slider(axsliderB, 'B', -30, 30.0, valinit=2)
sB.on_changed(update)
axsliderC = axes([0.74, 0.85, 0.16, 0.075])
sC = Slider(axsliderC, 'C', -30, 30.0, valinit=1)
sC.on_changed(update)
axes(ax)
A = 1;
B = 2;
C = 1;
y_data = A*x_data*x_data + B*x_data + C;
par_plot, = plot(x_data,y_data, lw=2, color='red')
show()
关于上述内容的注意事项:当我运行应用程序时,代码会按顺序运行(我认为它将update 函数存储在内存中),直到遇到阻塞的show()。当您对其中一个滑块进行更改时,它会从内存中运行更新功能(我认为?)。
这就是 show() 以这种方式实现的原因,以便您可以通过使用函数来处理数据在后台更改值。