ChatGPT解决这个技术问题 Extra ChatGPT

“用户警告:Matplotlib 当前使用的是 agg,这是一个非 GUI 后端,因此无法显示该图。”在 Pycharm 上用 pyplot 绘制图形时

我正在尝试使用 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'

然后,我尝试使用 pip install tkinter(在虚拟环境中)安装“tkinter”,但没有找到它:

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

我还应该提到,我使用虚拟环境在 Pycharm 社区版 IDE 上运行所有这些,并且我的操作系统是 Linux/Ubuntu 18.04。

我想知道如何解决这个问题以便能够显示图表。

暂时忘记图表。您的问题是安装 tkinter。您是否尝试过任何可用的解决方案,例如 stackoverflow.com/questions/4783810/install-tkinter-for-python
您实际上是在使用 tkinter 做任何事情,还是只是选择它作为 plt 后端?
@ImportanceOfBeingErnest:谢谢你的提示。我确实会首先专注于安装 tkinter。我会看看你提供的链接,看看我能不能从中得到什么。
@G.Anderson:在使用 matplotlib 遇到此错误之前,我不知道 tkinter 是什么。现在我正在尝试安装它只是为了能够显示图表(所以是的,我想我只是选择它作为 plt 后端)。如果您知道任何其他方式(即不使用 tkinter),我会很高兴听到它。
@G.Anderson:我运行脚本来循环浏览不同的后端。事实证明,只有 TkAgg 可用!事实上,我刚刚在测试脚本之前安装了它。

T
Trevor Boyd Smith

解决方案1:是安装GUI后端tk

我找到了解决问题的方法(感谢 ImportanceOfBeingErnest 的帮助)。

我所要做的就是使用以下命令通过 Linux bash 终端安装 tkinter

sudo apt-get install python3-tk

而不是使用 pip 或直接在 Pycharm 的虚拟环境中安装它。

解决方案 2:安装任何 matplotlib 支持的 GUI 后端

解决方案 1 工作正常,因为你得到了一个 GUI 后端......在这种情况下是 TkAgg

但是,您也可以通过安装任何 matplolib GUI 后端(如 Qt5Agg、GTKAgg、Qt4Agg 等)来解决此问题,例如 pip install pyqt5 也可以解决此问题

例如 pip install pyqt5 也会解决这个问题

笔记:

通常当您 pip install matplotlib 并且您尝试在 GUI 窗口中显示绘图并且您没有用于 GUI 显示的 python 模块时会出现此错误。

matplotlib 的作者使 pypi 软件部门不依赖任何 GUI 后端,因为有些人需要 matplotlib 而没有任何 GUI 后端。


实际上,我也意识到,自从我安装了 tkinter,我不再需要添加我的代码的前两行(import matplotlibmatplotlib.use('TkAgg')
为了完整起见,在 OpenSuse Leap 下,我必须安装的包称为 python3-matplotlib-tk
这个答案可能会提到 tkinter 是特定于 python 版本的,因为这个特定的命令将专门为您的默认 python 版本安装 tkinter。假设您为各种虚拟环境安装了不同的 python 版本。在这种情况下,您必须为该工作 venv 中使用的所需 python 版本安装它。例如,在我的例子中:sudo apt-get install python3.7-tk。不知道这一点让我在合理的时间内没有遇到模块名称“tkinter”错误,即使在为我的全局 python 版本安装它之后也是如此。
为了运行这个命令,我必须在我的 PC 上安装一个 Linux Bash 终端。它奏效了!请参阅howtogeek.com/249966/…
如果您的 python 版本是 3.8,或者使用 sudo apt-get install python3.8-tk
v
vinzee

就我而言,错误消息暗示我在无头控制台中工作。所以 plt.show() 无法工作。有效的是调用 plt.savefig

import matplotlib.pyplot as plt

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

我在 github repository 上找到了答案。


它并没有真正解决根本问题,但在我的情况下,这是首选的解决方案,因为最好保存图像而不是显示它,而且这种情况经常发生。
v
vinzee

如果您使用 Arch Linux(像 ManjaroAntegros 这样的发行版),只需输入:

sudo pacman -S tk

一切都会完美无缺!


恐怕这就像我第三次来到这里。也许通过评论它,下次我再试一次时,我更有机会记住这个“技巧”......
v
vinzee

简单安装

pip3 install PyQt5==5.9.2

这个对我有用。


是的,它有效!我通过 PyCharm 的终端将它安装在我的虚拟环境中。
我在没有指定版本号的情况下执行“pip3 install PyQt5”。
这是解决我问题的唯一答案
不知道这是怎么不被批准的。只有这种方法有效
z
zby

试试 import tkinter,因为 pycharm 已经为你安装了 tkinter,我看了 Install tkinter for Python

您也许可以尝试:

import tkinter
import matplotlib
import matplotlib.pyplot as plt
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。
我也遇到了同样的问题...我使用的是 linux 所以我使用这个命令来安装 tkinter sudo apt-get install python3-tk
我有这个问题,以前不会发生在我身上。我在 Mac 上使用 VS-code 工作室。
v
vinzee

答案已经给出了几次,但并不明显,需要安装图形,这可行。

pip3 install PyQt5

这在通过 Bazel 运行 python 二进制文件时有效。 +1
C
Community

我在 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

对于 Arch 用户

  sudo pacman -S tk

或者

  sudo pamac install tk

对于 Windows,使用 pip 安装 tk

安装 tkinter 后重新启动你的 Pycharm 并运行你的代码,它将工作


v
vinzee

我添加了 %matplotlib inline,我的情节出现在 Jupyter Notebook 中。


f
flaxel

这适用于 R reticulate。找到它here

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

例如:

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()

R
Rodrigo Xavier G

如果使用 Jupyter 笔记本,请尝试以下操作:

%matplotlib inline

即使没有指定

plt.show()

命令。


b
buddemat

issue = “UserWarning:Matplotlib 当前正在使用 agg,这是一个非 GUI 后端,因此无法显示该图。”

这对我有用

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

在 Ubuntu 16.04 上为我工作,PyCharm 教授
我认为这实际上是正确的解决方案,因为它是最简单的。只需要在需要的地方安装它,例如通过运行: pip3 install PyQt5
N
NobodySomewhere

对于 Windows 10,如果使用 pip install tk 对您不起作用,请尝试:

下载并运行适用于 windows 的官方 python 安装程序。即使您已经下载了它,请再次运行它。

当(重新)安装 python 时,请确保您选择了“高级”选项,并将复选框“tcl/tk and IDLE”设置为 true。

如果您已经安装了 python,请选择“修改”选项,并确保选中该复选框。

我的修复来源:https://stackoverflow.com/a/59970646/2506354


这正是我遇到的问题。重新下载适用于 Windows 的 python 安装程序,并通过修改将其添加到 python 安装中(升级后)。不需要重新创建 virtualenvs。
k
knowledge_seeker

使用 Pycharm 专业版 2021.3 时,这些答案都不适合我

常规的 matplotlib 图表确实适用于科学视图,但它不允许我在图表中添加图像。

对我有用的是在我尝试绘制任何东西之前添加这条线:

plt.switch_backend('TkAgg')


v
vinzee

我通过将 matplotlib.use('TkAgg') 放在所有 import 语句之后来解决它。我使用 python 3.8.5 VSCODE 和 anaconda。没有其他技巧奏效。


A
Agrover112

我在 Ubuntu 20.04 上安装了 python3-tk 并使用 WSL2

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib
    matplotlib.use( 'tkagg')

然后我从 Windows Store 安装了 GWSL,这似乎解决了开箱即用的 WSL2 渲染问题


H
Hari

@xicocaio 的评论应该被突出显示。

tkinter 是特定于 python 版本的,因为 sudo apt-get install python3-tk 将为您的默认 python 版本专门安装 tkinter。假设您在各种虚拟环境中有不同的 python 版本,您必须为该虚拟环境中使用的所需 python 版本安装 tkinter。例如,sudo apt-get install python3.7-tk。不这样做仍然会导致 No module named ' tkinter' 错误,即使在为全局 python 版本安装它之后也是如此。


l
lubumbax

在 Mac OS 上,我使它适用于:

import matplotlib
matplotlib.use('MacOSX')

v
vinzee

这将解决问题。它在 jupyter 中运行良好。

%matplotlib inline

这已在 this answerthis answer 中提及。无需重复现有答案。一旦你有足够的声望,你就可以投票给他们。
v
vinzee

以防万一这对任何人都有帮助。

Python 版本:3.7.7 平台:Ubuntu 18.04.4 LTS

这附带了默认的 python 版本 3.6.9,但是我已经安装了我自己的 3.7.7 版本的 python(安装从源代码构建它)

即使 help('module') 在列表中显示 tkinter,tkinter 也无法正常工作。

以下步骤对我有用:

sudo apt-get 安装 tk-dev。

重建 python: 1. 导航到您的 python 文件夹并运行检查:

cd Python-3.7.7
sudo ./configure --enable-optimizations

使用 make 命令构建: sudo make -j 8 --- 这里 8 是处理器的数量,使用 nproc 命令检查你的。安装使用:sudo make altinstall

不要使用 sudo make install,它会覆盖默认的 3.6.9 版本,以后可能会很乱。

现在检查 tkinter python3.7 -m tkinter

将弹出一个窗口框,您的 tkinter 现在已准备就绪。


M
Mohd

在升级了许多包(Spyder 3 到 4、KerasTensorflow 以及它们的许多依赖项)之后,我今天遇到了同样的问题!我无法弄清楚发生了什么;但是一直使用 Spyder 3 的(基于 conda 的)虚拟环境没有问题。尽管安装 tkinter 或更改后端、如上所示的 via matplotlib.use('TkAgg)how to change the backend 上的这篇不错的帖子可能会很好地解决问题,但我不认为这些是死板的解决方案。对我来说,卸载 matplotlib 并重新安装它很神奇,问题就解决了。

pip uninstall matplotlib

...然后,安装

pip install matplotlib

综上所述,这可能是一个包管理问题,顺便说一句,我尽可能同时使用 condapip


S
Shahir Ansari

您可以使用从 agg 到 Tkinter TKAgg 使用命令使用后端更改 matplotlib

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

这非常有帮助,因为我不必重新加载我的交互式 ipython 控制台大声笑。谢谢
u
user9393410

如果您在项目中使用一些第三方代码,则可以使用。它可能包含以下行

matplotlib.use('Agg')

搜索它并将其注释掉。

如果您不知道它是什么,您可能没有使用这部分代码。

使用另一个后端 GUI 的解决方案可能更简洁,因此请选择您的战斗机。


b
buddemat

绘图前执行以下命令

%matplotlib inline

您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
F
Felipe Araya Olea

尝试:

%matplotlib inline

我有同样的问题,它对我有用。我在我的 Jupyter 笔记本和 Visual Studio 代码上对其进行了测试,所以你应该没有问题。


v
vaine4

在带有 X 服务器的 WSL 上

确保您的 X 服务器正常工作。如果他无法连接到 X 显示器,Matplotlib 会指示此错误。

Windows 防火墙配置

注意windows防火墙!我从 WSL Debian 更改为 Ubuntu,但不记得防火墙规则。我使用 this post 配置 Windows 防火墙规则以使 X 服务器正常工作。这种方法避免了任何人都可以使用您的 X 服务器的过于宽松的规则。

它说 :

如果您已经安装了 X11 服务器,Windows 可能已经创建了会与上述配置混淆的防火墙规则。在“具有高级安全性的 Windows Defender 防火墙”中搜索并删除它们。

您现在需要配置 Windows 防火墙以允许从 WSL2 连接到 X11 显示服务器。您将在下一步中安装显示服务器。我们首先执行此步骤以避免 Windows 防火墙在您运行 X11 显示服务器时自动创建不安全的防火墙规则。许多关于 X11 转发和 WSL2 的指南使这个防火墙规则过于宽松,允许从任何计算机连接到您的计算机。这意味着理论上有人可以在您的同一网络上开始向您的计算机发送图形显示信息。为避免这种情况,我们将使 Windows 防火墙仅接受来自 WSL2 实例的 Internet 流量。要进行设置,您可以将以下内容复制到脚本并从 WSL2 中运行它:#!/bin/sh LINUX_IP=$(ip addr | awk '/inet / && !/127.0.0.1/ {split($2, a,"/"); print a[1]}') WINDOWS_IP=$(ip route | awk '/^default/ {print $3}') # 提升到管理员状态然后运行netsh添加防火墙规则powershell.exe -命令“Start-Process netsh.exe -ArgumentList \”advfirewall 防火墙添加规则名称=X11-Forwarding dir=in action=allow program=%ProgramFiles%\VcXsrv\vcxsrv.exe localip=$WINDOWS_IP remoteip=$LINUX_IP localport=6000 协议=tcp\" -动词 RunAs"

手动方法:

或者,您可以通过执行以下操作通过 GUI 手动添加规则: 打开“具有高级安全性的 Windows Defender 防火墙” 单击添加新规则会弹出新规则向导(在每个部分之间导航旁边): 规则类型:自定义程序: "This program path:" %ProgramFiles%\VcXsrv\vcxsrv.exe 协议和端口 协议类型:TCP 本地端口:6000 远程端口:任意 范围本地IP地址:通过在WSL2 ip中运行以下命令获取要放入的IP地址路线 | awk '/^default/ {print $3}' 远程 IP 地址 通过在 WSL2 中运行以下命令获取要输入的 IP 地址 ip addr | awk '/inet / && !/127.0.0.1/ {split($2,a,"/"); print a[1]}' 操作:“允许连接配置文件:选择域、私有和公共名称:“X11 转发”


虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
G
GigaWatts

Ubuntu 20.04 命令行设置。我安装以下内容以使 Matplotlib 停止抛出错误 UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

我通过以下步骤安装了 python-tk:

apt-get update

apt-get install python3.8-tk

M
Michael Sizonenko

Linux Mint 19. 对我有帮助:

sudo apt install tk-dev

PS 安装包后重新编译 python 解释器。


G
GuyStalks

当我在 Spyder 上遇到此错误时,我从逐行运行代码更改为突出显示我的绘图代码块并一次运行所有代码。瞧,图像出现了。


F
Fábio

如果您在基于 Debian 的系统上使用 pyenv 安装 python 版本,请确保在 pyenv install 之前运行 sudo apt install tk-dev。如果已安装,请使用 pyenv uninstall 将其删除,并在安装 tk-dev 后重新安装。因此,运行 pyenv install 时无需设置任何环境变量。


V
Vega

对我有用的解决方案:

将 tkinter import tkinter 安装到模块中,确保 matplotlib 使用 (TkAgg) 而不是 (Agg) matplotlib.use('TkAgg')


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅