„Ostrzeżenie użytkownika: Matplotlib obecnie używa agg, który nie jest zapleczem graficznym, więc nie może pokazać rysunku.” podczas kreślenia postaci z pyplotem na Pycharm


155

Próbuję wykreślić prosty wykres za pomocą pyplota, np .:

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

ale liczba się nie pojawia i pojawia się następujący komunikat:

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

Widziałem w kilku miejscach, że trzeba zmienić konfigurację matplotlib za pomocą:

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

Zrobiłem to, ale otrzymałem komunikat o błędzie, ponieważ nie mogę znaleźć modułu:

ModuleNotFoundError: No module named 'tkinter'

Następnie próbowałem zainstalować „tkinter” za pomocą pip install tkinter(w środowisku wirtualnym), ale go nie znalazłem:

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

Powinienem również wspomnieć, że uruchamiam to wszystko na Pycharm Community Edition IDE w środowisku wirtualnym, a mój system operacyjny to Linux / Ubuntu 18.04.

Chciałbym wiedzieć, jak mogę rozwiązać ten problem, aby móc wyświetlić wykres.


7
Zapomnij na chwilę o wykresie. Twoim problemem jest instalacja tkintera. Czy wypróbowałeś któreś z dostępnych rozwiązań, np. Stackoverflow.com/questions/4783810/install-tkinter-for-python ?
ImportanceOfBeingErnest

4
Czy faktycznie używasz tkintera do czegokolwiek, czy po prostu wybrałeś go jako zaplecze plt?
G. Anderson

1
@ImportanceOfBeingErnest: Dziękuję za podpowiedź. Rzeczywiście skupię się najpierw na instalacji tkintera. Rzucę okiem na podany przez Ciebie link i zobaczę, czy mogę coś z tego zrobić.
johnwolf1987

1
@ G.Anderson: Nie miałem pojęcia, czym jest tkinter, zanim napotkałem ten błąd w matplotlib. Teraz próbuję go zainstalować tylko po to, aby móc wyświetlać wykresy (więc tak, wydaje mi się, że wybrałem go jako zaplecze plt). Jeśli znasz inny sposób (np. Bez użycia tkintera), z przyjemnością go usłyszę.
johnwolf1987

2
@ G.Anderson: Uruchomiłem skrypt, aby przejść przez różne backendy. Okazuje się, że dostępny jest tylko TkAgg! Rzeczywiście, właśnie go zainstalowałem przed przetestowaniem skryptu.
johnwolf1987

Odpowiedzi:


217

Znalazłem rozwiązanie mojego problemu (dzięki pomocy ImportanceOfBeingErnest ).

Wszystko, co musiałem zrobić, to zainstalować tkinterprzez terminal Linux bash za pomocą następującego polecenia:

sudo apt-get install python3-tk

zamiast instalować go z piplub bezpośrednio w środowisku wirtualnym w Pycharm.


7
Właściwie zdałem sobie również sprawę, że odkąd zainstalowałem tkinter, nie muszę już dodawać pierwszych dwóch wierszy mojego kodu ( import matplotlibi matplotlib.use('TkAgg'))
johnwolf1987

Dla kompletności, w OpenSuse Leap pakiet, który musiałem zainstalować, nazywa się python3-matplotlib-tk.
Eldrad

6
Ta odpowiedź mogłaby prawdopodobnie wspomnieć, że tkinterjest specyficzna dla wersji Pythona w tym sensie, że to konkretne polecenie zainstaluje się tkinterwyłącznie dla domyślnej wersji Pythona. Załóżmy, że masz różne instalacje wersji Pythona dla różnych wirtualnych środowisk. W takim przypadku będziesz musiał zainstalować go dla żądanej wersji Pythona używanej w tym działającym pliku venv. Na przykład w moim przypadku: sudo apt-get install python3.7-tk. Nie wiedząc o tym, zmagałem się przez rozsądną ilość czasu z brakiem błędów „tkinter” w nazwie modułu, nawet po zainstalowaniu go dla mojej globalnej wersji Pythona.
xicocaio

Musiałem zainstalować terminal Linux Bash na moim komputerze, aby uruchomić to polecenie. I zadziałało! Zobacz howtogeek.com/249966/…
arame3333

Lub użyj, sudo apt-get install python3.8-tkjeśli twoja wersja Pythona to 3.8
Vicrobot

47

W moim przypadku komunikat o błędzie sugerował, że pracowałem na konsoli bezgłowej. Więc plt.show()nie mógł działać. To, co zadziałało, to dzwonienie plt.savefig:

import matplotlib.pyplot as plt

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

Znalazłem odpowiedź w repozytorium github .


Hej, to działa! Dziękuję za odpowiedź!
Jarrett

20

Jeśli używasz Arch Linux (dystrybucje takie jak Manjarolub Antegros), po prostu wpisz:

sudo pacman -S tk

I wszystko będzie działać idealnie!


1
Dziękuję Ci. Szukałem tego.
logicOnAbstractions

10

Spróbuj, import tkinterponieważ pycharm już zainstalował tkinter dla ciebie, szukałem Zainstaluj tkinter dla Pythona

Możesz spróbować:

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

jako sposób instalacji tkintera

Próbowałem na swój sposób, nie wydaje się, aby uruchomić na moim komputerze błąd, pomyślnie pokazuje rysunek. może dlatego, że pycharm ma tkinter jako pakiet systemowy, więc nie musisz go instalować. Ale jeśli nie możesz znaleźć tkintera w środku, możesz udać się do Tkdocs, aby zobaczyć sposób instalacji tkintera, jak wspomniano, tkinter jest podstawowym pakietem dla Pythona.


1
Dziękuje za twoją sugestię. Niestety to nie działa ( ModuleNotFoundError: No module named 'tkinter'). Spróbuję zainstalować tkinter w inny sposób.
johnwolf1987

7

Ja też miałem ten problem w PyCharm. Ten problem jest spowodowany tym, że nie masz modułu tkinter na swoim komputerze.

Aby zainstalować, wykonaj czynności podane poniżej (wybierz odpowiedni system operacyjny)

Dla użytkowników ubuntu

 sudo apt-get install python-tk

lub

 sudo apt-get install python3-tk

Dla użytkowników Centos

 sudo yum install python-tkinter

lub

 sudo yum install python3-tkinter

W systemie Windows użyj pip, aby zainstalować tk

Po zainstalowaniu tkinter uruchom ponownie Pycharm i uruchom kod, będzie działać


6

Prosta instalacja

pip3 install PyQt5==5.9.2

Mi to pasuje.


Tak, to działa! Zainstalowałem go w moim wirtualnym środowisku za pośrednictwem terminala PyCharm.
WH Lee

Wykonuję „pip3 install PyQt5” bez podawania numeru wersji.
oraclesoon

2

To działało z siatką R. Znalazłem to tutaj .

1: matplotlib.use( 'tkagg' ) lub 2: matplotlib$use( 'tkagg' )

Na przykład:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style

import matplotlib
matplotlib.use( 'tkagg' )


style.use("ggplot")
from sklearn import svm

x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]

plt.scatter(x,y)
plt.show()

1

Po wielu modernizacji opakowań ( Spyder3 do 4, Kerasa Tensorflowi wiele ich zależności), miałem ten sam problem już dziś! Nie mogę zrozumieć, co się stało; ale środowisko wirtualne (oparte na conda), które nadal używało Spyder3, nie miało problemu. Chociaż instalacja tkinterlub zmiana zaplecza, via matplotlib.use('TkAgg)jak pokazano powyżej, lub ten fajny post dotyczący zmiany zaplecza może równie dobrze rozwiązać problem, nie uważam tego za sztywne rozwiązania. Dla mnie odinstalowanie matplotlibi ponowne zainstalowanie było magiczne i problem został rozwiązany.

pip uninstall matplotlib

... następnie zainstaluj

pip install matplotlib

Z powyższego wynika, że ​​może to być problem z zarządzaniem pakietami, a tak przy okazji, używam obu condai pip, kiedy tylko jest to możliwe.


1

Możesz zmienić matplotlib za pomocą backendu, używając od aggdo Tkinter TKAggza pomocą polecenia

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

Było to bardzo pomocne, ponieważ nie musiałem ponownie ładować mojej interaktywnej konsoli ipython lol. Dzięki
Iulian Pinzaru,


0

Linux Mint 19. Pomógł mi:

sudo apt install tk-dev

PS Przekompiluj interpreter języka Python po instalacji pakietu.


0

Na wszelki wypadek, jeśli komuś to pomoże.

Wersja Pythona: 3.7.7 platforma: Ubuntu 18.04.4 LTS

To przyszło z domyślną wersją Pythona 3.6.9, jednak zainstalowałem na nim własną wersję pythona 3.7.7 (zainstalowałem budując go ze źródła)

tkinter nie działał nawet wtedy, gdy help('module')wyświetlał tkinter na liście.

Pomogły mi następujące kroki:

  1. sudo apt-get install tk-dev.

odbuduj pythona: 1. Przejdź do folderu python i uruchom testy:

cd Python-3.7.7
sudo ./configure --enable-optimizations
  1. Kompiluj za pomocą polecenia make: sudo make -j 8 --- tutaj 8 to liczba procesorów, sprawdź swoje za pomocą nprocpolecenia.
  2. Instalowanie za pomocą:

    sudo make altinstall
    

Nie używaj sudo make install, spowoduje to nadpisanie domyślnej wersji 3.6.9, która może być później niechlujna.

  1. Sprawdź teraz tkinter
    python3.7 -m tkinter
    

Pojawi się okno dialogowe, twój tkinter jest teraz gotowy.


0

Kiedy napotkałem ten błąd w Spyder, zmieniłem z uruchamiania mojego kodu wiersz po wierszu na podświetlanie mojego bloku kreślenia kodu i uruchamianie go jednocześnie. Voila, pojawił się obraz.


0

Należy wyróżnić komentarz @xicocaio.

tkinter jest specyficzny dla wersji Pythona w tym sensie, że sudo apt-get install python3-tkzainstaluje tkinter wyłącznie dla domyślnej wersji Pythona. Załóżmy, że masz różne wersje Pythona w różnych środowiskach wirtualnych, będziesz musiał zainstalować tkinter dla żądanej wersji Pythona używanej w tym środowisku wirtualnym. Na przykład sudo apt-get install python3.7-tk. Nie zrobienie tego nadal będzie prowadzić do No module named ' tkinter'błędów, nawet po zainstalowaniu go dla globalnej wersji Pythona.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.