plt.close()
将关闭当前实例。
plt.close(2)
将关闭第二个图形。
plt.close(plot1)
将关闭名为plot1的图形实例。
plt.close('all')
将关闭所有图形。
在
此处找到更多信息。
请记住,
plt.show()
是一个阻塞函数,因此在上面使用的示例代码中,直到窗口关闭时才执行
plt.close()
,这使它变得多余。
您可以在代码开头使用
plt.ion()
使其变为非阻塞式,但这会产生其他影响。
示例
在我们的评论讨论后,我准备了一个示例来演示如何使用绘图功能。
下面我创建了一个图形:
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实例的句柄。这被称为“artist(艺术家)”。如果我想更改线条的属性,例如更改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()函数。当您更改其中一个滑块的值时,它会从内存中运行update函数(我认为是这样?)。
这就是为什么实现show()函数的方式是这样的,这样您就可以使用函数在后台更改值来处理数据。