用户警告: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 Community Edition IDE上运行所有这些,并且我的操作系统是Linux/Ubuntu 18.04。

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

407387 次浏览

尝试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的核心包。

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

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

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

sudo apt-get install python3-tk

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

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

  • 解决方案1工作得很好,因为你得到了一个GUI后端…在本例中是TkAgg
  • 但是你也可以通过安装任何matplolib GUI后端来解决这个问题,比如Qt5AggGTKAggQt4Agg
    • 例如pip install pyqt5也会修复这个问题

注意:

  • 通常,当你安装matplotlib并且你试图在GUI窗口中显示一个图形,而你没有用于GUI显示的python模块时,会出现这个错误。
  • matplotlib的作者使pypi软件deps不依赖于任何GUI后端,因为有些人需要 matplotlib没有任何GUI后端。

在我的例子中,错误消息暗示我正在无头控制台中工作。所以plt.show()不能工作。有效的方法是调用plt.savefig:

import matplotlib.pyplot as plt


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

我在github库上找到了答案。

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

sudo pacman -S tk

一切都将完美地工作!

我在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并运行代码,它将工作

Linux Mint 19。对我有帮助:

sudo apt install tk-dev

附注:安装包后重新编译python解释器。

万一这能帮到谁呢。

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. < p >安装使用:

    sudo make altinstall
    

Don't use sudo make install, it will overwrite default 3.6.9 version, which might be messy later.

  1. Check tkinter now
    python3.7 -m tkinter
    

A windows box will pop up, your tkinter is ready now.

在升级了很多包(Spyder 3到4,KerasTensorflow以及它们的依赖项)之后,我今天遇到了同样的问题!我想不出发生了什么事;但是(基于conda的)虚拟环境一直使用Spyder 3没有这个问题。虽然安装tkinter或改变后端,如上所示的via matplotlib.use('TkAgg),或关于如何改变后端的这篇漂亮的帖子,可能很好地解决了问题,但我不认为这些是严格的解决方案。对我来说,卸载matplotlib并重新安装它是魔术,问题得到了解决。

pip uninstall matplotlib

... 然后,安装

pip install matplotlib

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

当我在Spyder上遇到这个错误时,我从一行一行地运行我的代码,改为突出显示我的绘图代码块并一次性运行。瞧,图像出现了。

你可以在后端使用from agg to Tkinter TKAgg using命令更改matplotlib

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

简单的安装

pip3 install PyQt5==5.9.2

这对我很管用。

我添加了%matplotlib inline 我的图出现在Jupyter Notebook.

@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版本安装它之后也是如此。

这适用于R网状结构。发现它在这里

< p > 1: matplotlib.use( 'tkagg' )2: matplotlib$use( 'tkagg' ) < / p >

例如:

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

issue = "用户警告:Matplotlib目前正在使用agg,这是非gui后端,所以不能显示图形。"

这对我很有效

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

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

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

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

我已经通过将matplotlib.use('TkAgg')放在所有import语句之后来解决它。 我使用python 3.8.5 VSCODE和anaconda。

如果你在基于debian的系统上使用pyenv安装python版本,请确保在pyenv install之前运行sudo apt install tk-dev。如果已经安装,则使用pyenv uninstall删除它,并在安装tk-dev后再次安装它。因此,在运行pyenv install时不需要设置任何env变量。

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

matplotlib.use('Agg')

搜索它并注释掉它。

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

使用另一个后端GUI的解决方案可能更干净,所以选择你的战斗机。

答案已经给出了几次,但并不明显,一个需要安装图形,这是有效的。

pip3 install PyQt5

如果使用Jupyter笔记本电脑尝试以下:

%matplotlib inline

这应该呈现的情节,即使没有指定

plt.show()

命令。

对我有效的解决方案是:

  1. < p >安装tkinter

  2. 导入tkinter到模块

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

    matplotlib.use(“TkAgg”)

小心你的代码中的导入顺序,我花了一整天的时间来回答这个问题,最终通过在其他任何事情之前导入bt,然后使用.use('TkAgg')语句来解决问题(由于某种原因,导入bt将matplotlib后端更改为'Agg')

绘图前请执行以下命令

%matplotlib inline

另一个选项是安装水蟒。这是一个有用的软件,你可以创建许多环境,并且已经安装了许多用于数据科学和机器学习的库。

——编辑

这里有一些步骤可以帮助我解决你同样的问题:

  • 步骤1:在官方页面上下载。exe: 水蟒,使用个人版,因为它是免费的:蟒蛇个人
  • 一旦你安装了程序,打开到env部分 李enter image description here < / >

在本节中,您可以根据自己的喜好创建多个env,例如,我有两个env,一个用于我的主基础(根),一个用于python的最后一个版本。

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

  • 额外的考虑:正如你在下面的快照中看到的,你可以很容易地看到你在conda中安装了哪些库。我得到了你同样的错误,因为我错过了3个libs中的一个 enter image description here < / p >

希望是有用的,明白! 自保”< / p >

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

  • 下载并运行官方windows python安装程序。即使你
  • . .
  • 当(重新)安装python时,请确保您选择了"advanced"选择, 设置复选框&;tcl/tk和IDLE"为true。< / >强
  • 如果你已经安装了python,请选择“;Modify"选择,
  • .使用实例

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

< p >运行 % matplotlib内联 曾经为我解决了这个问题。 我在这里找到了答案:当我在jupyter笔记本上使用matplotlib时,它总是弹出"matplotlib目前使用非gui后端;错误呢? by user Mulugeta Weldezgina

添加%matplotlib内联,同时导入有助于平滑的绘图 笔记本< / p >

%matplotlib inline
import matplotlib.pyplot as plt

%matplotlib inline设置matplotlib的后端为'inline' 后端: 有了这个后端,绘图命令的输出将内联显示 就像Jupyter笔记本一样,在代码的正下方 产生它的细胞。生成的图形也将存储在

我的问题开始后,我使用pandas_profile(或类似的东西),并运行%matplotlib inline一旦固定的背景从无头等。

这将解决问题。它在木星上工作得很好。

%matplotlib inline

试一试:

%matplotlib inline

我也遇到过同样的问题,这招对我很管用。我在我的Jupyter笔记本和visual studio代码上测试了它,所以你应该没有问题。

在Mac OS上,我让它工作:

import matplotlib
matplotlib.use('MacOSX')

在使用Pycharm专业版2021.3时,这些答案对我都不起作用

常规的matplotlib图表在科学观点上确实有效,但它不允许我向图表中添加图像。

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

plt.switch_backend('TkAgg')

在WSL上使用X服务器

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

Windows防火墙配置

注意windows防火墙!我把WSL Debian换成了Ubuntu,不记得防火墙规则了。 我使用这篇文章来配置windows防火墙规则,使X服务器工作。这个方法避免了过于宽松的规则,任何人都可以使用你的X服务器

信上说:

如果您已经安装了X11服务器,Windows可能已经创建了防火墙规则,这些规则会打乱上面的配置。在“高级安全Windows防御防火墙”中搜索并删除它们;

现在需要配置Windows Firewall,以允许从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}')
# 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%\VcXsrv\vcxsrv.exe localip=$WINDOWS_IP remoteip=$LINUX_IP localport=6000 protocol=tcp\" -Verb RunAs"

手动方法:

或者,您也可以通过GUI手动添加规则,如下所示:

  1. 打开“Windows Defender Firewall with Advanced security”;
  2. 单击添加新规则,弹出新建规则向导(在每个部分之间导航):
    • 规则类型:自定义
    • 此程序路径:"% ProgramFiles % \ VcXsrv \ vcxsrv.exe
    • 协议和端口
    • 协议类型:TCP
    • 本端端口:6000
    • 远程端口:any
    • <李>范围
      • 本端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转发”;

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
我在Windows 7和PyCharm Pro上也有同样的问题。 它发生在我安装财务软件包& ffn"之后

import ffn

Matplotlib后端已更改为“add”。 你可以检查当前后端:

matplotlip.get_backend()

您可以通过以下方式更改当前后端:

matplotlib.use(backend = "module://backend_interagg")

这在一个额外的或内部窗口中为我的PyCharm Professional解决了问题。