在 Pycharm 上使用 pyplot 绘制图形时出现“UserWarning:Matplotlib 当前正在使用 agg,这是一个非 GUI 后端,因此无法显示图形。”
- 2025-02-12 10:04:00
- admin 原创
- 122
问题描述:
我正在尝试使用 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.
我找到并尝试了一些建议来重新配置该警告中提到的“后端”,如下所示:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
但这给了我一条错误消息:
ModuleNotFoundError: No module named 'tkinter'
我以为我必须单独安装这个模块,但是pip install tkinter
不起作用:
Collecting tkinter
Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter
如何让 Matplotlib 显示图形?
另请参阅:为什么 tkinter (或 turtle) 似乎丢失或损坏?它不应该是标准库的一部分吗?。这个问题不是重复的,因为答案讨论了除 Tkinter 之外的其他后端。
另请参阅_tkinter.TclError:没有显示名称和没有 $DISPLAY 环境变量,以了解尝试远程使用 Matplotlib 时出现的问题。
解决方案 1:
解决方案 1:安装 GUI 后端tk
我找到了解决问题的方法(感谢ImportanceOfBeingErnest的帮助)。
我所要做的就是tkinter
使用以下命令通过 Linux bash 终端进行安装:
sudo apt-get install python3-tk
而不是使用pip
Pycharm 中的虚拟环境或直接在虚拟环境中安装它。
解决方案 2:安装任何matplotlib
受支持的 GUI 后端
解决方案 1 工作正常,因为你得到了一个 GUI 后端...在这种情况下
TkAgg
但是你也可以通过安装任何 matplolib GUI 后端(如、、
Qt5Agg
等)
来修复此问题GTKAgg
`Qt4Agg`例如
pip install pyqt5
也会修复该问题
笔记:
通常,当您使用 pip install matplotlib 并尝试在 GUI 窗口中显示绘图而没有用于 GUI 显示的 python 模块时,会出现此错误。
作者
matplotlib
使得 pypi 软件依赖不依赖于任何 GUI 后端,因为有些人不需要matplotlib
任何 GUI 后端。
解决方案 2:
就我的情况而言,错误消息暗示我正在无头控制台中工作。所以plt.show()
无法工作。有效的方法是调用plt.savefig
:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [5, 7, 4])
plt.savefig("mygraph.png")
我在github 存储库中找到了答案。
解决方案 3:
如果你使用 Arch Linux(像Manjaro
或 这样的发行版Antegros
),只需输入:
sudo pacman -S tk
一切都会完美进行!
解决方案 4:
安装简单
pip3 install PyQt5==5.9.2
它对我有用。
解决方案 5:
尝试一下,import tkinter
因为 pycharm 已经为你安装了 tkinter,我查看了为 Python 安装 tkinter
您或许可以尝试:
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 的核心包。
解决方案 6:
我添加了它%matplotlib inline
,并且我的情节出现在 Jupyter Notebook 中。
解决方案 7:
我在 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 并运行代码,它将正常工作
解决方案 8:
这与 R reticulate 配合使用。在这里找到它。
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()
解决方案 9:
对于 Windows 10,如果使用pip install tk
不适合您,请尝试:
下载并运行适用于 Windows 的官方 Python 安装程序。即使您已经下载,也请再次运行它。
当(重新)安装 python 时,请确保选择“高级”选项,并将
复选框“tcl/tk 和 IDLE”设置为 true。如果您已经安装了 python,请选择“修改”选项,并确保选中该复选框。
我的修复来源:
https ://stackoverflow.com/a/59970646/2506354
解决方案 10:
我python3-tk
在 Ubuntu 20.04 上安装了,并使用 WSL2
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use( 'tkagg')
然后我从 Windows 商店安装了GWSL ,这似乎解决了 WSL2 开箱即用的渲染问题
解决方案 11:
使用 Pycharm Professional 版本 2021.3,这些答案对我都不起作用
常规 matplotlib 图表在科学视图上确实有效,但它不允许我在图表中添加图像。
对我有用的是在尝试绘制任何内容之前添加此行:
plt.switch_backend('TkAgg')
解决方案 12:
问题 = “用户警告:Matplotlib 目前正在使用 agg,它是一个非 GUI 后端,因此无法显示图形。”
这对我有用
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Qt5Agg')
解决方案 13:
matplotlib.use('TkAgg')
我通过在所有 import 语句之后放置它来解决这个问题。我使用 python 3.8.5 VSCODE 和 anaconda。其他技巧都不管用。
解决方案 14:
应该突出显示@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 版本安装它也是如此。
解决方案 15:
在 Mac OS 上,我使其与以下设备配合使用:
import matplotlib
matplotlib.use('MacOSX')
解决方案 16:
在带有 X 服务器的 WSL 上
确保您的 X 服务器正常工作。如果 Matplotlib 无法连接到 X 显示器,则会显示此错误。
Windows 防火墙配置
注意 Windows 防火墙!我从 WSL Debian 更改为 Ubuntu,但记不住防火墙规则。我使用这篇文章来配置 Windows 防火墙规则以使 X 服务器正常工作。此方法避免了过于宽松的规则,使任何人都可以使用您的 X 服务器。
文中写道:
如果您已经安装了 X11 服务器,Windows 可能已创建防火墙规则,这些规则会干扰上述配置。在“高级安全 Windows Defender 防火墙”中搜索并删除它们。
现在,您需要配置 Windows 防火墙以允许从 WSL2 到 X11 显示服务器的连接。您将在下一步中安装显示服务器。我们首先执行此步骤,以避免 Windows 防火墙在您运行 X11 显示服务器时自动创建不安全的防火墙规则。许多关于 X11 转发和 WSL2 的指南都使此防火墙规则过于宽松,允许从任何计算机连接到您的计算机。这意味着,从理论上讲,如果有人与您在同一个网络上,他们就可以开始向您的计算机发送图形显示信息。
为了避免这种情况,我们将使 Windows 防火墙仅接受来自 WSL2 实例的互联网流量。
要进行设置,您可以将以下内容复制到脚本并从 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}') # Elevate to administrator status then run netsh to add firewall rule powershell.exe -Command "Start-Process netsh.exe -ArgumentList \"advfirewall firewall add rule name=X11-Forwarding dir=in action=allow program=%ProgramFiles%VcXsrvcxsrv.exe localip=$WINDOWS_IP remoteip=$LINUX_IP localport=6000 protocol=tcp\" -Verb RunAs"
手动方法:
或者,您可以通过执行以下操作通过 GUI 手动添加规则:
打开“高级安全 Windows Defender 防火墙”
单击“添加新规则”将调出新规则向导(接下来在每个部分之间导航):
规则类型:自定义
程序:“此程序路径:”%ProgramFiles%\VcXsrv\vcxsrv.exe
协议和端口
协议类型:TCP
本地端口:6000
远程端口:任意
范围
本地 IP 地址:通过在 WSL2 中运行以下命令获取要输入的 IP 地址
ip route | awk '/^default/ {print $3}'
远程 IP 地址
通过在 WSL2 中运行以下命令获取要进入的 IP 地址
ip addr | awk '/inet / && !/127.0.0.1/ {split($2,a,"/"); print a[1]}'
操作:“允许连接
配置文件:选择域、私有域和公共域
名称:“X11转发”
解决方案 17:
Python版本:3.7.7 平台:Ubuntu 18.04.4 LTS
它带有默认的 Python 版本 3.6.9,但是我在其上安装了我自己的 3.7.7 版本 Python(从源代码构建安装)
即使help('module')
列表中显示 tkinter,tkinter 也无法工作。
以下步骤对我有用:
sudo apt-get install tk-dev.
重建python:
导航到你的 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 现在已准备就绪。
解决方案 18:
如果在基于 Debian 的系统上使用pyenv安装 python 版本,请确保sudo apt install tk-dev
在 之前运行pyenv install
。 如果已经安装,请使用 将其删除pyenv uninstall
,然后在 install 之后重新安装tk-dev
。 因此,运行时无需设置任何环境变量pyenv install
。
解决方案 19:
运行
%matplotlib inline
一次解决了我的问题。我在这里找到了答案:当我在 jupyter 笔记本中使用 matplotlib 时,它总是引发“matplotlib 当前正在使用非 GUI 后端”错误?
作者:用户 Mulugeta Weldezgina
导入时添加 %matplotlib inline 有助于在笔记本中绘制平滑的图表
%matplotlib inline
import matplotlib.pyplot as plt
%matplotlib inline 将 matplotlib 的后端设置为“内联”后端:使用此后端,绘图命令的输出将以内联方式显示在 Jupyter 笔记本等前端中,直接显示在生成它的代码单元下方。生成的图表也将存储在笔记本文档中。
我的问题是在我使用 pandas_profile(或类似的东西)后开始的,运行 %matplotlib inline
一次就修复了背景无头等问题。
解决方案 20:
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
解决方案 21:
对于 Windows,请在安装期间选中此框:
解决方案 22:
Linux Mint 19. 对我有帮助:
sudo apt install tk-dev
PS:包安装后重新编译python解释器。
解决方案 23:
在升级了许多软件包(从Spyder
3 升级到 4,Keras
以及Tensorflow
许多依赖项)后,我今天遇到了同样的问题!我不知道发生了什么;但继续使用Spyder
3 的(基于 conda 的)虚拟环境没有出现问题。虽然安装tkinter
或更改后端via matplotlib.use('TkAgg)
(如上所示)或这篇关于 如何更改后端的精彩帖子可能会解决问题,但我认为这些不是僵化的解决方案。对我来说,卸载matplotlib
并重新安装它就像魔术一样,问题就解决了。
pip uninstall matplotlib
...然后,安装
pip install matplotlib
从以上所有情况来看,这可能是一个包管理问题,顺便说一句,只要可行,我就会同时使用conda
和pip
。
解决方案 24:
当我在 Spyder 上遇到此错误时,我不再逐行运行代码,而是突出显示绘图代码块并一次性运行。瞧,图像出现了。
解决方案 25:
您可以使用从命令更改为agg
Tkinter使用后端的 matplotlibTKAgg
matplotlib.use('TKAgg',warn=False, force=True)
解决方案 26:
如果您在项目中使用了一些第三方代码,则可以使用。它可能包含以下行
matplotlib.use('Agg')
搜索它并将其注释掉。
如果您不知道它是什么,您可能不会使用这部分代码。
关于使用另一个后端 GUI 的解决方案可能更清晰,所以选择你的战斗机。
解决方案 27:
注意代码中的导入顺序,我花了一整天的时间研究这些答案,最终通过在任何其他操作之前导入 bt 然后使用.use('TkAgg')
语句解决了这个问题(由于某种原因,导入 bt 会将 matplotlib 后端更改为“Agg”)
解决方案 28:
我在 Windows 7 和 PyCharm Pro 上也遇到了同样的问题。在我安装了财务软件包“ffn”之后,
import ffn
Matplotlib 后端已更改为“添加”。您可以通过以下方式检查当前后端:
matplotlip.get_backend()
您可以通过以下方式更改当前后端:
matplotlib.use(backend = "module://backend_interagg")
它解决了我在附加或内部窗口中使用 PyCharm Professional 时遇到的问题。
解决方案 29:
对我有用的解决方案:
安装 tkinter
将 tkinter 导入模块
确保 matplotlib 使用 (TkAgg) 而不是 (Agg)
matplotlib.use('TkAgg')
解决方案 30:
另一个选择是安装Anaconda。它是一款实用的软件,您可以在其中创建许多环境,并且已经安装了许多用于数据科学和机器学习的库。
以下步骤可帮助我解决您的相同问题:
步骤 1:在官方页面下载 .exe:Anaconda,使用单独版本,因为它是免费的:Anaconda Individual
第 2 步:安装程序后,打开并进入环境部分
在本节中,您可以根据需要创建多个环境,例如,我有 2 个环境,一个用于我的主要基础(根),一个用于最新版本的 python。
步骤3:在本节中创建 py 环境,Anaconda 将自动安装开发人员使用的主流库,降低代码出现错误的风险。
额外注意事项:如下面的快照所示,您可以轻松查看您在 conda 中安装了哪些库。我遇到了同样的错误,因为我错过了这 3 个库中的一个