построение линий без блокировки выполнения - PullRequest
16 голосов
/ 22 февраля 2010

Я использую matplotlib для рисования диаграмм и графиков.

Когда я строю график с помощью команды show(), мой код блокируется этой командой.

Я хотел бы обновить свой список значений новыми данными, а затем обновить изображение на фоне. Как это сделать, не закрывая каждый раз окно с графиком? Ниже приведен код, который я использую

import pylab
a = (1,2,3,4)
pylab.plot(a)
pylab.show() # blocks here

Ответы [ 4 ]

12 голосов
/ 22 февраля 2010

В IPython, который начинается с -pylab, он не должен блокироваться.

В противном случае: С ion() вы включаете интерактивный режим. show() не блокирует вашу систему больше. Каждые draw() или plot(x, y) обновляют ваш сюжет.

ioff() отключает интерактивный режим. Полезно, если вы добавляете много данных и не хочу обновить каждую мелочь.

Смотри также: http://www.scipy.org/Cookbook/Matplotlib/Animations

3 голосов
/ 22 февраля 2010

Если вы не используете оболочку IPython, а вместо этого запускаете программу, вы, вероятно, захотите сделать:

pyplot.draw()

после plot(), возможно, за которым следует

raw_input("Press enter when done...")

чтобы ждать пользователя, прежде чем строить что-то еще.

Если вы делаете pyplot.ion() в начале своей программы, выполнение draw() часто даже можно пропустить.

pyplot.show() на самом деле представляет собой бесконечный цикл, который обрабатывает события в главном окне печати (такие как масштабирование, панорамирование и т. Д.).

0 голосов
/ 28 апреля 2016

В 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.
0 голосов
/ 22 февраля 2010

Это работает, вызывая Ipython с опцией -wthread (или -pylab). Он больше не будет блокироваться на show.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...