Попробуйте ввести команду pylab.ion()
после импорта pylab, и посмотрите, позволяет ли это показать несколько графиков. Это всегда был мой подход, когда мне приходилось многократно отображать графики обновления, не закрывая окно.
Обратите внимание, что вам нужно будет создавать новые объекты фигур и осей для каждого отдельного окна графика, в противном случае графики будут перезаписывать старые графики.
Например, следующий код работает для меня, чтобы создать два окна с разными графиками:
import pylab
pylab.ion()
fig1 = pylab.figure()
fig1.add_subplot(111).plot([1,2],[3,4])
pylab.draw()
fig2 = pylab.figure()
fig2.add_subplot(111).plot([5,6],[10,9])
pylab.draw()
Добавлена
Учитывая ваши последующие комментарии, вот новый скрипт, который использует show()
, но который отображает разные графики каждый раз, когда вызывается pylab.draw()
, и который оставляет окна графиков неопределенными. Он использует простую логику ввода, чтобы решить, когда закрывать фигуры (потому что использование show()
означает, что pylab не будет обрабатывать щелчки на кнопке windows x), но это должно быть просто добавить в графический интерфейс пользователя как другую кнопку или как текстовое поле .
import numpy as np
import pylab
pylab.ion()
def get_fig(fig_num, some_data, some_labels):
fig = pylab.figure(fig_num,figsize=(8,8),frameon=False)
ax = fig.add_subplot(111)
ax.set_ylim([0.1,0.8]); ax.set_xlim([0.1, 0.8]);
ax.set_title("Quarterly Stapler Thefts")
ax.pie(some_data, labels=some_labels, autopct='%1.1f%%', shadow=True);
return fig
my_labels = ("You", "Me", "Some guy", "Bob")
# To ensure first plot is always made.
do_plot = 1; num_plots = 0;
while do_plot:
num_plots = num_plots + 1;
data = np.random.rand(1,4).tolist()[0]
fig = get_fig(num_plots,data,my_labels)
fig.canvas.draw()
pylab.draw()
print "Close any of the previous plots? If yes, enter its number, otherwise enter 0..."
close_plot = raw_input()
if int(close_plot) > 0:
pylab.close(int(close_plot))
print "Create another random plot? 1 for yes; 0 for no."
do_plot = raw_input();
# Don't allow plots to go over 10.
if num_plots > 10:
do_plot = 0
pylab.show()