"UserWarning: Matplotlib наразі використовує agg, який не є графічним інтерфейсом, тому не може показувати рисунок." при нанесенні фігури за допомогою піплота на Pycharm


124

Я намагаюся побудувати простий графік за допомогою pyplot, наприклад:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[5,7,4])
plt.show()

але цифра не з'являється, і я отримую таке повідомлення:

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

У кількох місцях я бачив, що потрібно було змінити конфігурацію matplotlib, використовуючи наступне:

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

Я зробив це, але потім отримав повідомлення про помилку, оскільки він не може знайти модуль:

ModuleNotFoundError: No module named 'tkinter'

Потім я спробував встановити "tkinter" за допомогою pip install tkinter(всередині віртуального середовища), але він не знаходить:

Collecting tkinter
  Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter

Слід також зазначити, що я запускаю все це в середовищі IDE Pycharm Community Edition за допомогою віртуального середовища, і що моєю операційною системою є Linux / Ubuntu 18.04.

Я хотів би знати, як я можу вирішити цю проблему, щоб мати можливість відображати графік.


7
На мить забудьте про графік. Ваша проблема - встановити tkinter. Ви пробували будь-яке з доступних рішень, наприклад, stackoverflow.com/questions/4783810/install-tkinter-for-python ?
ImportanceOfBeingErnest

3
Ви насправді використовуєте tkinter для чого-небудь, чи просто вибрали його як plt-сервер?
Г. Андерсон,

1
@ImportanceOfBeingErnest: Дякую за підказку. Я справді сфокусуюся на першій установці tkinter. Я подивлюсь на надане вами посилання та побачу, чи можу я з цього щось зробити.
johnwolf1987

1
@ G.Anderson: Я не уявляв, що таке tkinter, перш ніж наткнувся на цю помилку з matplotlib. Зараз я намагаюся встановити його лише для того, щоб мати змогу показувати графіки (так що, мабуть, я просто вибрав його як plt-бекенд). Якщо ви знаєте будь-який інший спосіб (тобто без використання tkinter), я був би радий це почути.
johnwolf1987

2
@ G.Anderson: Я запустив сценарій, щоб прокручувати різні серверні бази. Виявляється, доступний лише TkAgg! Справді, я щойно встановив його до тестування сценарію.
johnwolf1987

Відповіді:


191

Я знайшов рішення своєї проблеми (завдяки допомозі ImportanceOfBeingErnest ).

Все, що мені потрібно було зробити, це встановити tkinterчерез термінал bash Linux, використовуючи таку команду:

sudo apt-get install python3-tk

замість того, щоб встановлювати його pipу віртуальному середовищі Pycharm або безпосередньо у нього.


7
Власне, я також зрозумів, що, оскільки я встановив tkinter, мені більше не потрібно додавати перші два рядки мого коду ( import matplotlibі matplotlib.use('TkAgg'))
johnwolf1987

Для повноти, під OpenSuse Leap називається пакет, який мені довелося встановити python3-matplotlib-tk.
Ельдрад

5
Ця відповідь могла б згадати, що tkinterце специфікація версії python в тому сенсі, що ця конкретна команда встановлюватиметься tkinterвиключно для вашої версії python за замовчуванням. Припустимо, у вас встановлені різні версії python для різних віртуальних середовищ. У такому випадку вам доведеться встановити його для потрібної версії python, яка використовується у цьому робочому venv. Наприклад, в моєму випадку: sudo apt-get install python3.7-tk. Невідомість цього змусило мене боротися розумну кількість часу, не отримуючи помилок імені модуля 'tkinter', навіть після встановлення його для моєї глобальної версії python.
xicocaio

Мені довелося встановити Linux Bash Terminal на своєму ПК, щоб запустити цю команду. І це спрацювало! Дивіться howtogeek.com/249966/…
arame3333

38

У моєму випадку повідомлення про помилку означало, що я працюю в безголовій консолі. Тому plt.show()не могло працювати. Що працювало, дзвонило plt.savefig:

import matplotlib.pyplot as plt

plt.plot([1,2,3], [5,7,4])
plt.savefig("mygraph.png")

Я знайшов відповідь у сховищі github .


16

Якщо ви використовуєте Arch Linux (дистрибутиви типу Manjaroor Antegros), просто введіть:

sudo pacman -S tk

І все буде працювати чудово!


1
Дякую. Шукав це.
logicOnAbstractions

7

Спробуйте, import tkinterоскільки pycharm вже встановив для вас tkinter, я подивився Встановити tkinter для Python

Ви можете спробувати:

import tkinter
import matplotlib
matplotlib.use('TkAgg')
plt.plot([1,2,3],[5,7,4])
plt.show()

як спосіб встановлення tkinter

Я спробував твій шлях, здається, помилка не запускається на моєму комп’ютері, він успішно показує рисунок. може тому, що pycharm має tkinter як системний пакет, тому вам не потрібно його встановлювати. Але якщо ви не можете знайти tkinter всередині, ви можете перейти до Tkdocs, щоб побачити спосіб встановлення tkinter, як уже згадується, tkinter - це основний пакет для python.


Дякуємо за вашу пропозицію. На жаль, це не працює ( ModuleNotFoundError: No module named 'tkinter'). Я спробую встановити tkinter іншим способом.
johnwolf1987

6

У мене теж була ця проблема в PyCharm. Ця проблема пов’язана з тим, що у вас немає модуля tkinter у вашій машині.

Щоб встановити, виконайте наведені нижче дії (виберіть відповідну ОС)

Для користувачів ubuntu

 sudo apt-get install python-tk

або

 sudo apt-get install python3-tk

Для користувачів Centos

 sudo yum install python-tkinter

або

 sudo yum install python3-tkinter

Для Windows використовуйте pip для встановлення tk

Після встановлення tkinter перезапустіть Pycharm і запустіть свій код, він запрацює


3

Проста установка

pip3 install PyQt5==5.9.2

Це працює для мене.


Так, це працює! Я встановив його всередині мого віртуального env через термінал PyCharm.
WH Lee

Я виконую "pip3 install PyQt5", не вказуючи номер версії.
оракул

1

Ви можете змінити matplotlib за допомогою бекенда за допомогою від aggна Tkinter TKAggза допомогою команди

matplotlib.use('TKAgg',warn=False, force=True)

Це було дуже корисно через те, що мені не довелося перезавантажувати інтерактивну консоль ipython, ха-ха. Дякую
Юліан Пінзару


0

Про всяк випадок, якщо це комусь допоможе.

Версія Python: платформа 3.7.7: Ubuntu 18.04.4 LTS

Це поставилося з версією python за замовчуванням 3.6.9, однак я встановив на нього свою власну версію python 3.7.7 (встановлено, будуючи її з джерела)

tkinter не працював, навіть коли help('module') tkinter відображається у списку.

Для мене працювали наступні кроки:

  1. sudo apt-get install tk-dev.

відновити python: 1. Перейдіть до папки python і запустіть перевірки:

cd Python-3.7.7
sudo ./configure --enable-optimizations
  1. Збірка за допомогою команди make: sudo make -j 8 --- тут 8 - кількість процесорів, перевірте свій за допомогою nprocкоманди.
  2. Встановлення за допомогою:

    sudo make altinstall
    

Не використовуйте sudo make install, він замінить версію 3.6.9 за замовчуванням, яка пізніше може бути брудною.

  1. Перевірте tkinter зараз
    python3.7 -m tkinter
    

З'явиться вікно з вікном, ваш tkinter готовий зараз.


0

Після модернізації великої кількості пакетів ( від Spyder3 до 4, Kerasа Tensorflowі безліч їх залежностей), у мене була та ж проблема сьогодні! Я не можу зрозуміти, що сталося; але віртуальне середовище (на основі конда), яке продовжувало використовувати Spyder3, не мало проблеми. Хоча встановленняtkinter або зміна серверної бази, via matplotlib.use('TkAgg)як показано вище, або цей приємний допис про те, як змінити серверну систему , цілком може вирішити проблему, я не бачу в них жорстких рішень. Для мене видалення matplotlibта перевстановлення було магією, і проблема була вирішена.

pip uninstall matplotlib

... потім встановіть

pip install matplotlib

З усього вищесказаного, це може бути проблемою управління пакетами, і, до речі, я використовую обидва condaі pip, коли це можливо.


0

Коли я зіткнувся з цією помилкою на Spyder, я змінив від запуску коду рядок за рядком до виділення мого блоку побудови коду та запуску цього відразу. Вуаля, з'явився образ.



0

Слід виділити коментар @xicocaio.

tkinter є специфічною для версії python в тому сенсі, що sudo apt-get install python3-tkвстановлюватиме tkinter виключно для вашої версії python за замовчуванням. Припустимо, у вас є різні версії python у різних віртуальних середовищах, вам доведеться встановити tkinter для потрібної версії python, яка використовується у цьому віртуальному середовищі. Наприклад, sudo apt-get install python3.7-tk. Якщо цього не зробити, це все одно призведе до No module named ' tkinter'помилок, навіть після встановлення для глобальної версії python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.