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

Хранить окно печати в 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()
4b9b3361

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