Ответ 1
Вот более разумный ответ после быстрого изучения проблемы.
Сначала предположим, что
from matplotlib import pylab
pylab.plot(range(10), range(10))
pylab.show()
не "удерживает" график, т.е. пока он не показан до завершения программы. Если это произойдет, тогда вызов pylab.show()
предположил, что вы работаете в интерактивном режиме, поэтому происходит еще один процесс, который будет продолжаться после вызова этой функции. Так как это не так, Python завершает работу и отображает график. Теперь первый подход к решению этого вопроса заключается в том, чтобы заставить pylab.show
блокировать:
pylab.show(block=True)
Тем не менее, мы не знаем, почему pylab.show
предположил, что вы работаете в интерактивном режиме. Чтобы подтвердить свое предположение, эксперимент, выполняющий следующий код
import matplotlib
print matplotlib.is_interactive()
если это печатает True, значит, ваша настройка по умолчанию установлена на interactive: True
. Чтобы проверить, какая именно конфигурация, выполните print matplotlib.matplotlib_fname()
, чтобы узнать путь к ней. Откройте его и проверьте значение для параметра interactive
.
Теперь, если вы предпочитаете не изменять конфигурацию, я предлагаю другое решение:
import matplotlib
from matplotlib import pylab
if matplotlib.is_interactive():
pylab.ioff()
pylab.plot(range(10), range(10))
pylab.show()
поэтому нет ситуации, когда matplotlib
думает, что он должен отображать материал перед вызовом метода show
. Наконец, самым ужасным из этих решений будет использование pylab.pause
или эквивалентов:
from matplotlib import pylab
pylab.ion() # Force interactive
pylab.plot(range(10), range(10))
pylab.show() # This does not block
pylab.pause(2**31-1)