Matplotlib при отладке в Pycharm: как отключить интерактивный режим?

Прежде всего, я работаю над консолью отладки Pycharm и хочу разместить подпись под своей диаграммой. Согласно этому ответу, этого можно достичь:

plt.plot([2,5,1,2]
fig = plt.figure()
fig.text(.5, .05, "text", ha="center")
plt.show()

Тем не менее, это сначала показывает мне сюжет, затем пустое окно (после ввода второй строки) и ничего позже.

Я понял, что это должно быть из-за интерактивного режима matplotlib, поэтому я отключил его, используя plt.ioff() в сеансе отладки, после чего plt.isinteractive() вернет False. Тем не менее, это не меняет его поведения и показывает график сразу после команды plt.plot(...).

Как ни странно, когда я помещаю plt.ioff() в свой сценарий, он игнорируется и plt.isinteractive() возвращает True.

import matplotlib.pyplot as plt

plt.ioff()
plt.plot([1,2,3,4,5])
print(plt.isinteractive())

Моя системная информация:

  • PyCharm CE 2017.3.2
  • macOS Sierra 10.12.6
  • Python 3.6.3 в среде Anaconda

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


person PeterHeuz    schedule 14.03.2018    source источник


Ответы (1)


Чтобы ответить на ваш вопрос: используйте другой (не интерактивный) бэкэнд:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

Ваш код, вероятно, не работает, потому что вы создали экземпляр фигуры после своего сюжета. Пытаться:

fig = plt.figure()
plt.plot([2,5,1,2]
fig.text(.5, .05, "text", ha="center")
plt.show()
person FlyingTeller    schedule 14.03.2018
comment
Использование предложенного вами другого бэкэнда сейчас не показывает мне никакого сюжета. Нетер с plt.plot(...), ни с plt.plot(...) и plt.show(). Выполнение моего тестового файла (без matplotlib.use('Agg')) из bash работает должным образом: графики отображаются после plt.show(), и я даже могу выполнять интерактивное построение с помощью pdb. - person PeterHeuz; 15.03.2018
comment
Это то, что делает неинтерактивный бэкэнд, он не должен открывать окно с вашим сюжетом в нем. Где вы можете решить вашу исходную проблему с текстом, который не отображается, переключая вызов рисунка и графика? - person FlyingTeller; 15.03.2018
comment
Текст теперь работает, спасибо! Но моя основная проблема, которую я хочу построить в режиме отладки pycharm, так же, как он работает из bash с pdb, не решена. - person PeterHeuz; 15.03.2018
comment
Он по-прежнему показывает пустые цифры? - person FlyingTeller; 15.03.2018
comment
Он по-прежнему либо отображает график напрямую при выполнении plt.plot(...), либо ничего, когда я переключаюсь на неинтерактивный бэкэнд, как вы описали. Я хотел бы, чтобы график отображался, когда я запускаю plt.show(), как будто он работает на bash с pdf. - person PeterHeuz; 15.03.2018
comment
Не могли бы вы добавить import matplotlib, а затем print(matplotlib.rcParams['backend']) вверху вашего скрипта (перед другим импортом) и сообщить, что он делает, когда а) выполняется из bash б) выполняется с использованием pycharm - person FlyingTeller; 15.03.2018
comment
Они оба возвращаются MacOSX - person PeterHeuz; 16.03.2018
comment
Позвольте нам продолжить это обсуждение в чате. - person PeterHeuz; 16.03.2018
comment
Что такое "Агг", пожалуйста? - person slashdottir; 04.11.2019
comment
@slashdottir Это бэкэнд, который использует Anti-Grain Geometry engine. Для получения дополнительной информации о серверных ВМ прочтите документацию < / а> - person FlyingTeller; 04.11.2019