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

问题描述:

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

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

解决方案 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 手动添加规则:

  1. 打开“高级安全 Windows Defender 防火墙”

  2. 单击“添加新规则”将调出新规则向导(接下来在每个部分之间导航):

    • 规则类型:自定义

    • 程序:“此程序路径:”%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 也无法工作。

以下步骤对我有用:

  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 现在已准备就绪。

解决方案 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:

在升级了许多软件包(从Spyder3 升级到 4,Keras以及Tensorflow许多依赖项)后,我今天遇到了同样的问题!我不知道发生了什么;但继续使用Spyder3 的(基于 conda 的)虚拟环境没有出现问题。虽然安装tkinter或更改后端via matplotlib.use('TkAgg)(如上所示)或这篇关于 如何更改后端的精彩帖子可能会解决问题,但我认为这些不是僵化的解决方案。对我来说,卸载matplotlib并重新安装它就像魔术一样,问题就解决了。

pip uninstall matplotlib

...然后,安装

pip install matplotlib

从以上所有情况来看,这可能是一个包管理问题,顺便说一句,只要可行,我就会同时使用condapip

解决方案 24:

当我在 Spyder 上遇到此错误时,我不再逐行运行代码,而是突出显示绘图代码块并一次性运行。瞧,图像出现了。

解决方案 25:

您可以使用从命令更改为aggTkinter使用后端的 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:

对我有用的解决方案:

  1. 安装 tkinter

  2. 将 tkinter 导入模块

  3. 确保 matplotlib 使用 (TkAgg) 而不是 (Agg)

matplotlib.use('TkAgg')

解决方案 30:

另一个选择是安装Anaconda。它是一款实用的软件,您可以在其中创建许多环境,并且已经安装了许多用于数据科学和机器学习的库。

以下步骤可帮助我解决您的相同问题:

  • 步骤 1:在官方页面下载 .exe:Anaconda,使用单独版本,因为它是免费的:Anaconda Individual

  • 第 2 步:安装程序后,打开并进入环境部分
    在此处输入图片描述

在本节中,您可以根据需要创建多个环境,例如,我有 2 个环境,一个用于我的主要基础(根),一个用于最新版本的 python。

  • 步骤3:在本节中创建 py 环境,Anaconda 将自动安装开发人员使用的主流库,降低代码出现错误的风险。

  • 额外注意事项:如下面的快照所示,您可以轻松查看您在 conda 中安装了哪些库。我遇到了同样的错误,因为我错过了这 3 个库中的一个
    在此处输入图片描述

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1989  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1446  
  在当今快速发展的IT行业中,项目管理工具的选择对于项目的成功至关重要。随着技术的不断进步,项目经理们需要更加高效、灵活的工具来应对复杂的项目需求。本文将介绍2025年IT项目经理力推的10款管理工具,帮助您在项目管理中取得更好的成果。信创国产项目管理软件 - 禅道禅道是一款国产开源的项目管理软件,禅道开源版不限人数,功...
项目管理工具   0  
  在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目成功的关键工具。随着技术的不断进步,市场上涌现出众多功能各异的项目管理工具,每一款都有其独特的优势和适用场景。本文将深入评测2025年最受欢迎的10款项目管理软件,帮助您根据自身需求做出明智的选择。信创国产项目管理软件 - 禅道禅道是一款...
项目管理平台   2  
  产品开发效率对于企业的竞争力至关重要。在当今复杂多变的商业环境中,如何有效提升产品开发效率成为众多企业关注的焦点。产品生命周期管理(PLM)作为一种整合产品全生命周期信息的管理理念和技术,为提升产品开发效率提供了有力的支持。通过合理运用PLM,企业能够优化流程、加强协作、提高数据管理水平,从而实现产品开发的高效运作。接...
plm开发流程软件   3  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用