Построение линий без блокировки выполнения
Я использую matplotlib для рисования диаграмм и графиков.
Когда я рисую график, используя команду show()
, мои кодовые блоки с этой командой.
Я хотел бы обновить список значений новыми данными и обновить изображение на фоне. Как это сделать, не закрывая каждый раз окно с графиком?
Ниже приведен код, который я использую
import pylab
a = (1,2,3,4)
pylab.plot(a)
pylab.show() # blocks here
Ответы
Ответ 1
В IPython, запущенном с -pylab
, он не должен блокироваться.
В противном случае:
С помощью ion()
вы включаете интерактивный режим. show()
не блокирует вашу систему
больше. Каждый draw()
или plot(x, y)
обновил ваш сюжет.
ioff()
отключает интерактивный режим. Полезно, если вы добавляете много данных и не
хотите обновить каждую мелочь.
Смотрите также: http://www.scipy.org/Cookbook/Matplotlib/Animations
Ответ 2
Если вы не используете оболочку IPython, но вместо этого запускаете программу, вы, вероятно, захотите сделать:
pyplot.draw()
после a plot()
, возможно, после
raw_input("Press enter when done...")
чтобы дождаться, когда пользователь закроет что-то еще.
Если вы делаете pyplot.ion()
в начале вашей программы, выполнение draw()
часто даже может быть пропущено.
pyplot.show()
на самом деле представляет собой бесконечный цикл, который обрабатывает события в главном окне графика (например, масштабирование, панорамирование и т.д.).
Ответ 3
В MacOS X у меня была проблема, что разблокировка только создала белый экран. В конце концов предложение @tyleha, использующее% pylab непосредственно в записной книжке, помогло.
На самом деле это предлагалось при использовании устаревшего флага -pylab:
bash:~/Projects/plyground $ python -m IPython notebook -pylab
WARNING: `-pylab` flag has been deprecated.
Use `--matplotlib <backend>` and import pylab manually.
[E 21:09:05.446 NotebookApp] Support for specifying --pylab on the command line has been removed.
[E 21:09:05.447 NotebookApp] Please use `%pylab` or `%matplotlib` in the notebook itself.
Ответ 4
Это работает, вызывая Ipython с опцией -wthread
(или -pylab
). Он больше не будет блокироваться на show
.