Подтвердить что ты не робот

Построение линий без блокировки выполнения

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

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

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

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

Ответ 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.