Почему я получаю UserWarning: Matplotlib в настоящее время использует ps, который не является бэкэндом с графическим интерфейсом, поэтому не может показать рисунок

Этого нет в блокноте jupyter, поэтому это не дубликат этого вопроса, но мой код:

from gluoncv import model_zoo, data, utils
from matplotlib import pyplot as plt

...
plt.show()

Ошибка, которую я получаю:

/figure.py:445: UserWarning: Matplotlib is currently using ps, which is a non-GUI backend, so cannot show the figure.
  % get_backend())

Я создал реплику на https://repl.it/@shamoons/WelloffHarmfulMineral

Если это имеет значение, я использую OS X. Что мне нужно сделать, чтобы изображение отображалось?

Бэкенд PS предназначен для создания файлов PostScript, а не для отображения графиков. Это предупреждение matplotlib сообщает вам, что ваш вызов plt.show() не сделает того, что вы думаете.

yorodm 22.01.2019 20:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
13 542
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

matplotlib.use('PS') и plt.show() являются взаимоисключающими. Вам нужно решить:

  • Вы хотите, чтобы показать фигуру на экране? Решение: удалите строку matplotlib.use('PS').
  • Вы хотите использовать серверную часть PS? Это кажется маловероятным, потому что редко есть причина устанавливать серверную часть на что-то неинтерактивное, если только вы не работаете на сервере. В любом случае, решение: заменить plt.show() на plt.savefig("filname.ps").

Я изменил код и удалил matplotlib.use('PS'). Я получаю ту же ошибку

Shamoon 22.01.2019 20:55

Вероятно, потому что вы не перезапустили ядро ​​после внесения этого изменения.

ImportanceOfBeingErnest 22.01.2019 20:56

Я не веду блокнот. Это Python, работающий на моем Mac, так как мне перезапустить ядро?

Shamoon 22.01.2019 20:58

Хорошо, как ты это делаешь? Можете ли вы создать минимальный воспроизводимый пример? Что такое gluoncv?

ImportanceOfBeingErnest 22.01.2019 21:01

Я создал реплику в repl.it/@shamoons/WelloffHarmfulMineral, однако я работаю в Mac OS X.

Shamoon 22.01.2019 21:02

Эта ссылка repl.it приводит к разным ошибкам для меня. Кроме того, на сервере repl.it вы действительно не сможете show() фигуру. Итак, вернемся к вашему локальному компьютеру, можете ли вы установить серверную часть перед импортом gluoncv, import matplotlib; matplotlib.use("TkAgg"); import gluoncv....?

ImportanceOfBeingErnest 22.01.2019 21:12

@ImportanceOfBeingErnest, а что, если я хочу показать живой сюжет? я имею в виду, что я постоянно обновляю свой график, поэтому savefig - не очень хорошая идея, так как мне приходится много раз закрывать/открывать изображения. у вас есть какие-либо предложения ?

AcaNg 01.08.2019 10:17

@Tiendung Вы не можете использовать бэкэнд PS для живых сюжетов.

ImportanceOfBeingErnest 01.08.2019 13:55

Ты можешь использовать

matplotlib.use("TkAgg")

вместо

matplotlib.use("PS")

при разработке на MacOS.

Обратите внимание, что импорт должен быть до импорта plt, вот так:

import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt

Другие вопросы по теме