Хранить окно печати в Matplotlib
При написании сценариев, использующих matplotlib, я временно получаю окно интерактивного графика, когда я запускаю script, который сразу же исчезает, прежде чем я смогу просмотреть сюжет. Если я буду выполнять один и тот же код в интерактивном режиме внутри iPython, окно графика останется открытым. Как я могу получить matplotlib, чтобы сохранить график открытым, когда он создает граф, когда я запускаю script?
Например, я могу сохранить этот график, но я не могу его отобразить с помощью show()
:
from matplotlib import pyplot as plt
import scipy as sp
x = sp.arange(10)
y = sp.arange(10)
plt.plot(x,y)
plt.show()
Ответы
Ответ 1
В соответствии с документацией существует экспериментальный параметр block
, который вы можете передать на plt.show()
. Конечно, если ваша версия matplotlib не является достаточно новой, она не будет иметь этого.
Если у вас есть эта функция, вы можете заменить plt.show()
на plt.show(block=True)
, чтобы получить желаемое поведение.
Ответ 2
Старый вопрос, но более канонический ответ (возможно), поскольку он использует только документально, а не экспериментальные функции.
Перед тем, как выйдет script, введите неинтерактивный режим и покажите свои цифры. Это можно сделать, используя plt.show()
или plt.gcf().show()
. Оба будут блокировать:
plt.ioff()
plt.show()
ИЛИ
plt.ioff()
plt.gcf().show()
В обоих случаях функция show
не вернется, пока фигура не будет закрыта. Первый случай состоит в том, чтобы блокировать все фигуры, второй случай заключается в блокировке только до тех пор, пока одна фигура не будет закрыта.
Вы даже можете использовать контекстный менеджер matplotlib.rc_context
, чтобы временно изменить интерактивное состояние в середине вашей программы, не изменяя ничего:
import matplotlib as mpl
with mpl.rc_context(rc={'interactive': False}):
plt.show()
ИЛИ
with mpl.rc_context(rc={'interactive': False}):
plt.gcf().show()