то, что я пытаюсь сделать, это script вычислить что-то, подготовить график и показать уже полученные результаты как pylab.figure - в python 2 (в частности, python 2.7) со стабильным matplotlib (который равен 1.1. 1).
В python 3 (python 3.2.3 с matplotlib git build... version 1.2.x) это работает отлично. В качестве простого примера (моделирования длительных вычислений по time.sleep()) рассмотрим
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.draw()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
pylab.draw()
time.sleep(1)
В python 2 (версия 2.7.3 vith matplotlib 1.1.1) код работает без ошибок, но не показывает этот рисунок. Небольшая пробная версия и ошибка с интерпретатором python2, казалось, предлагали заменить pylab.draw() на pylab.show(); сделать это один раз, по-видимому, достаточно (не так, как при рисовании, называя его после каждого изменения/добавления к сюжету). Следовательно:
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.show()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
#pylab.draw()
time.sleep(1)
Однако это тоже не работает. Опять же, он работает чисто, но не показывает цифру. Кажется, это делается только при ожидании ввода пользователем. Мне непонятно, почему это так, но график наконец показан, когда raw_input() добавляется в цикл
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.show()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
#pylab.draw()
time.sleep(1)
raw_input()
При этом script, конечно, будет ждать ввода пользователя, показывая график, и не будет продолжать вычислять данные до того, как пользователь попадет в enter. Это было, конечно, не намерение.
Это может быть вызвано различными версиями matplotlib (1.1.1 и 1.2.x) или разными версиями python (2.7.3 и 3.2.3).
Есть ли способ выполнить с python 2 со стабильным (1.1.1) matplotlib то, что имеет вышеуказанный script (первый) в python 3, matplotlib 1.2.x: - вычисление данных (что в приведенном выше примере занимает симуляция time.sleep()) в цикле или итерированной функции и - (пока все еще вычисляет), показывая то, что уже было вычислено в предыдущих итерациях - и не беспокоить пользователя, чтобы он постоянно нажимал enter для вычисления, чтобы продолжить
Спасибо; Буду признателен за любую помощь...