Ответ 1
plt.close()
закроет текущий экземпляр.
plt.close(2)
закроет цифру 2
plt.close(plot1)
закроет цифру с примером plot1
plt.close('all')
закроет все fiures
Найден здесь.
Помните, что 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. Это называется художником. Если я хочу изменить свойство строки, например изменить 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)
изменяет свойство ydata объекта Line2D с помощью дескриптора par_plot
.
Функция 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() реализуется так, как есть, поэтому вы можете изменять значения в фоновом режиме, используя функции для обработки данных.