PyCharm Matplotlib "UserWarning: Matplotlib в настоящее время использует agg, который не является GUI бэкэндом, поэтому не может показать рисунок. Plt.show ()" - PullRequest
0 голосов
/ 17 марта 2020

У меня проблемы с функцией matplotlib.pyplot.show(). Я использую PyCharm на Linux, и у меня есть VirtualEnv . Когда я выполняю файл x.py во встроенном терминале в PyCharm (используя venv) следующим образом:

$ python x.py

все работает отлично, функция plt.show() рендерится и хорошо показывает построенный график. я добавил print(matplotlib.get_backend()), чтобы увидеть, какой бэкэнд был использован по умолчанию, и результат был GTK3Agg .

Проблема начинается, когда я использую опцию Run, а не терминал. Затем я получаю сообщение об ошибке

UserWarning: Matplotlib в настоящее время использует agg, который не является GUI бэкэндом, поэтому не может показать рисунок. plt.show ()

В любом случае, я искал в Интернете и, согласно this и другим ссылкам, мне пришлось добавить backend: GTK3Agg в .config / matplotlib / matplotlibr c. Файл не существует, поэтому я создал его сам. Теперь, когда я снова запускаюсь, я получаю следующие сообщения об ошибках:

raise ImportError('backend Gtk3Agg requires cairo') from e ImportError: backend Gtk3Agg requires cairo

Как я могу это исправить?

1 Ответ

1 голос
/ 17 марта 2020

Мне удалось решить мою проблему, благодаря @ImportanceOfBeingErnest, указавшему, что у меня было две среды: одна, в которой установлены GTK и зависимости, и одна, которая используется PyCharm, где их нет.

Мне пришлось go до Settings > Project interpreter и установить matplotlib , pycairo и PyGObject .

Также были необходимы для установки pycairo и PyGObject были эти пакеты, которые мне пришлось установить с терминала:

sudo dnf install cairo-devel (or libcairo2 in ubuntu)
sudo dnf install python3-devel
sudo dnf install gobject-introspection-devel
sudo dnf install cairo-gobject-devel

Теперь я могу использовать GTK3Agg в качестве моего бэкэнда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...