"UserWarning: Matplotlib verwendet derzeit agg, ein Backend ohne GUI, daher kann die Abbildung nicht angezeigt werden." beim Zeichnen einer Figur mit Pyplot auf Pycharm

116

Ich versuche, mit pyplot ein einfaches Diagramm zu zeichnen, z.

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

Die Abbildung wird jedoch nicht angezeigt und ich erhalte die folgende Meldung:

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

Ich habe an mehreren Stellen gesehen, dass man die Konfiguration von matplotlib folgendermaßen ändern musste:

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

Ich habe dies getan, aber dann eine Fehlermeldung erhalten, weil kein Modul gefunden werden kann:

ModuleNotFoundError: No module named 'tkinter'

Dann habe ich versucht, "tkinter" mit pip install tkinter(innerhalb der virtuellen Umgebung) zu installieren , aber es findet es nicht:

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

Ich sollte auch erwähnen, dass ich all dies auf Pycharm Community Edition IDE in einer virtuellen Umgebung ausführe und dass mein Betriebssystem Linux / Ubuntu 18.04 ist.

Ich möchte wissen, wie ich dieses Problem lösen kann, um das Diagramm anzeigen zu können.

johnwolf1987
quelle
6
Vergessen Sie die Grafik für einen Moment. Ihr Problem ist die Installation von tkinter. Haben Sie eine der verfügbaren Lösungen dafür ausprobiert, z. B. stackoverflow.com/questions/4783810/install-tkinter-for-python ?
ImportanceOfBeingErnest
3
Verwenden Sie tkinter tatsächlich für irgendetwas oder haben Sie es einfach als plt-Backend ausgewählt?
G. Anderson
1
@ImportanceOfBeingErnest: Danke für den Hinweis. Ich werde mich in der Tat zuerst auf die Installation von tkinter konzentrieren. Ich werde mir den von Ihnen bereitgestellten Link ansehen und sehen, ob ich etwas daraus machen kann.
Johnwolf1987
1
@ G.Anderson: Ich hatte keine Ahnung, was tkinter ist, bevor ich mit matplotlib auf diesen Fehler gestoßen bin. Jetzt versuche ich es zu installieren, nur um Diagramme anzeigen zu können (also ja, ich denke, ich habe es gerade als plt-Backend ausgewählt). Wenn Sie einen anderen Weg kennen (dh ohne tkinter zu verwenden), würde ich mich freuen, ihn zu hören.
Johnwolf1987
2
@ G.Anderson: Ich habe das Skript ausgeführt, um durch die verschiedenen Backends zu blättern. Es stellt sich heraus, dass nur TkAgg verfügbar ist! Tatsächlich hatte ich es gerade vor dem Testen des Skripts installiert.
Johnwolf1987

Antworten:

173

Ich habe eine Lösung für mein Problem gefunden (dank der Hilfe von ImportanceOfBeingErnest ).

Alles, was ich tun musste, war die Installation tkinterüber das Linux-Bash-Terminal mit dem folgenden Befehl:

sudo apt-get install python3-tk

anstatt es mit pipoder direkt in der virtuellen Umgebung in Pycharm zu installieren.

johnwolf1987
quelle
7
Eigentlich wurde mir auch klar, dass ich seit der Installation von tkinter nicht mehr die ersten beiden Zeilen meines Codes ( import matplotlibund matplotlib.use('TkAgg'))
hinzufügen muss
Der Vollständigkeit halber wird unter OpenSuse Leap das Paket aufgerufen, das ich installieren musste python3-matplotlib-tk.
Eldrad
2
Diese Antwort könnte wahrscheinlich erwähnen, dass tkinterPython in dem Sinne versionsspezifisch ist, dass dieser spezielle Befehl tkinterausschließlich für Ihre Standardversion von Python installiert wird . Angenommen, Sie haben verschiedene Python-Versionen für verschiedene virtuelle Umgebungen installiert. In diesem Fall müssen Sie es für die gewünschte Python-Version installieren, die in diesem funktionierenden Venv verwendet wird. Zum Beispiel in meinem Fall : sudo apt-get install python3.7-tk. Wenn ich das nicht wusste, hatte ich eine angemessene Zeit damit zu kämpfen, keine Fehler mit dem Modulnamen 'tkinter' zu bekommen, selbst nachdem ich es für meine globale Python-Version installiert hatte.
Xicocaio
35

In meinem Fall bedeutete die Fehlermeldung, dass ich in einer kopflosen Konsole arbeitete. Soplt.show() konnte nicht funktionieren. Was funktionierte, war zu rufen plt.savefig:

import matplotlib.pyplot as plt

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

Ich habe die Antwort in einem Github-Repository gefunden .

vinzee
quelle
13

Wenn Sie Arch Linux (Distributionen wie Manjarooder Antegros) verwenden, geben Sie einfach Folgendes ein:

sudo pacman -S tk

Und alles wird perfekt funktionieren!

dexXxed
quelle
6

Ich hatte auch dieses Problem in PyCharm. Dieses Problem liegt daran, dass Ihr Computer kein tkinter-Modul enthält.

Befolgen Sie zur Installation die folgenden Schritte (wählen Sie das entsprechende Betriebssystem aus).

Für Ubuntu-Benutzer

 sudo apt-get install python-tk

oder

 sudo apt-get install python3-tk

Für Centos-Benutzer

 sudo yum install python-tkinter

oder

 sudo yum install python3-tkinter

Verwenden Sie für Windows pip, um tk zu installieren

Nach der Installation von tkinter starten Sie Ihren Pycharm neu und führen Sie Ihren Code aus. Es wird funktionieren

Arjun Kumar
quelle
5

Versuchen Sie es, import tkinterda pycharm tkinter bereits für Sie installiert hat. Ich habe nach tkinter für Python installiert gesucht

Sie können vielleicht versuchen:

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

als tkinter-Installationsmethode

Ich habe es versucht, es scheint kein Fehler zu sein, auf meinem Computer zu laufen, es zeigt erfolgreich die Abbildung. Vielleicht, weil Pycharm tkinter als Systempaket hat, müssen Sie es also nicht installieren. Wenn Sie tkinter jedoch nicht finden können, können Sie unter Tkdocs nachsehen, wie tkinter installiert werden kann. Tkinter ist ein Kernpaket für Python.

okie
quelle
Danke für deinen Vorschlag. Leider funktioniert es nicht ( ModuleNotFoundError: No module named 'tkinter'). Ich werde versuchen, tkinter auf andere Weise zu installieren.
Johnwolf1987
3

Einfache Installation

pip3 install PyQt5==5.9.2

Für mich geht das.

Manish Gupta
quelle
Ja, es funktioniert! Ich habe es über das PyCharm-Terminal in meiner virtuellen Umgebung installiert.
WH Lee
Ich führe "pip3 install PyQt5" aus, ohne die Versionsnummer anzugeben.
Orakel
1

Sie können die matplotlib über das Backend mit dem Befehl from aggto Tkinter TKAggusing ändern

matplotlib.use('TKAgg',warn=False, force=True)
Shahir Ansari
quelle
Dies war sehr hilfreich, da ich meine interaktive ipython-Konsole nicht neu laden musste lol. Danke
Iulian Pinzaru
0

Linux Mint 19. Hat mir geholfen:

sudo apt install tk-dev

PS Kompilieren Sie den Python-Interpreter nach der Paketinstallation neu.

Michael Sizonenko
quelle
0

Nur für den Fall, dass dies jemandem hilft.

Python-Version: 3.7.7 Plattform: Ubuntu 18.04.4 LTS

Dies kam mit der Standard-Python-Version 3.6.9, aber ich hatte meine eigene Python-Version 3.7.7 darauf installiert (installiert, indem ich sie aus dem Quellcode erstellt habe).

tkinter funktionierte nicht, auch wenn help('module')tkinter in der Liste angezeigt wird.

Die folgenden Schritte haben bei mir funktioniert:

  1. sudo apt-get install tk-dev.

Erstellen Sie die Python neu: 1. Navigieren Sie zu Ihrem Python-Ordner und führen Sie die folgenden Überprüfungen aus:

cd Python-3.7.7
sudo ./configure --enable-optimizations
  1. Erstellen mit dem Befehl make: sudo make -j 8 --- Hier sind 8 die Anzahl der Prozessoren. Überprüfen Sie Ihre mit dem nprocBefehl.
  2. Installation mit:

    sudo make altinstall

Verwenden Sie nicht sudo make install, da dadurch die Standardversion 3.6.9 überschrieben wird, die später möglicherweise unübersichtlich wird.

  1. Überprüfen Sie jetzt tkinter
    python3.7 -m tkinter

Eine Windows-Box wird angezeigt, Ihr tkinter ist jetzt bereit.

Diven
quelle
0

Nach dem Upgrade viele Pakete ( Spyder3 bis 4, Kerasund Tensorflowund viele ihre Abhängigkeiten), hatte ich das gleiche Problem heute! Ich kann nicht herausfinden, was passiert ist; Aber die (conda-basierte) virtuelle Umgebung, die weiterhin Spyder3 verwendete, hatte das Problem nicht. Obwohl die Installation tkinteroder Änderung des Backends, via matplotlib.use('TkAgg)wie oben gezeigt, oder dieser nette Beitrag zum Ändern des Backends das Problem möglicherweise lösen, sehe ich dies nicht als starre Lösung. Für mich war die Deinstallation matplotlibund Neuinstallation magisch und das Problem wurde gelöst.

pip uninstall matplotlib

... dann installieren

pip install matplotlib

Nach alledem könnte dies ein Problem bei der Paketverwaltung sein, und übrigens verwende ich beide condaund pip, wann immer dies möglich ist.

Mohd
quelle
0

Als ich auf Spyder auf diesen Fehler stieß, wechselte ich von der zeilenweisen Ausführung meines Codes zum Hervorheben meines Plots für das Plotten von Code und der gleichzeitigen Ausführung. Voila, das Bild erschien.

GuyStalks
quelle