2010-08-16 4 views
6

Поведение участка matplotlib и imshow меня сбивает с толку.matplotlib plot and imshow

import matplotlib as mpl 
import matplotlib.pyplot as plt 

Если я позвоню plt.show() до вызова plt.imshow (I), то возникает ошибка. Если я вызываю plt.imshow (i) до вызова plt.show(), тогда все работает отлично. Однако, если я закрываю первую фигуру, которая открывается, а затем вызывает plt.imshow (i), отображается новая фигура без вызова plt.show().

Может кто-нибудь объяснить это?

ответ

14

Если я вызываю plt.show() перед вызовом plt.imshow (i), тогда возникает ошибка. Если я вызываю plt.imshow (i) до , вызывая plt.show(), то все работает отлично.

plt.show() отображает фигуру (и входит в mainloop того же бэкэнда, который вы используете). Вы не должны называть его до тех пор, пока вы не замышляете вещи и не хотите, чтобы их отображали.

plt.imshow() рисует изображение на текущей фигуре (при создании фигуры нет текущей фигуры). Вызов plt.show(), прежде чем вы нарисовали что-либо, не имеет никакого смысла. Если вы хотите явно создать новый рисунок, используйте plt.figure().

... новая фигура отображается без ведома вызов plt.show().

Это не произойдет, если вы не бежите код в нечто похожее на режим pylab IPython, где MainLoop графического пользовательского интерфейса Backend будет выполняться в отдельном потоке ...

Вообще говоря, PLT. show() будет последней строкой вашего скрипта. (Или будет вызван всякий раз, когда вы хотите остановить и визуализировать сюжет, который вы сделали, во всяком случае.)

Надеюсь, это имеет смысл.

+2

Что вы делаете, если хотите отобразить последовательность изображений, временно приостановив их, чтобы отобразить их на экране, а затем перейти к следующему изображению? Вам нужно будет вызвать show() в какой-то момент, но если вы это сделаете, вы не сможете выполнить оставшуюся часть кода, чтобы отобразить следующее изображение. – ely

+0

Просто запустите новую фигуру plt.figure() или закройте предыдущий файл plt.close(). – j13r