我试图用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。

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


尝试导入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后端来解决这个问题,比如Qt5Agg, GTKAgg, Qt4Agg等 例如,PIP安装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(发行版如Manjaro或Antegros),只需输入:

sudo pacman -S tk

一切都将完美地工作!


我在PyCharm中也遇到了这个问题。这个问题是因为您的机器中没有tkinter模块。

按照下面给出的步骤安装(选择合适的操作系统)

对于ubuntu用户

 sudo apt-get install python-tk

or

 sudo apt-get install python3-tk

对于Centos用户

 sudo yum install python-tkinter

or

 sudo yum install python3-tkinter

适用于Arch用户

  sudo pacman -S tk

or

  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(安装从源代码构建它)

即使帮助('module')在列表中显示Tkinter, Tkinter也没有工作。

下面的步骤对我很有效:

Sudo apt-get install tk-dev。

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

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

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

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

现在查看tkinter Python3.7 -m tkinter

一个窗口框将弹出,你的tkinter已经准备好了。


After upgrading lots of packages (Spyder 3 to 4, Keras and Tensorflow and lots of their dependencies), I had the same problem today! I cannot figure out what happened; but the (conda-based) virtual environment that kept using Spyder 3 did not have the problem. Although installing tkinter or changing the backend, via matplotlib.use('TkAgg) as shown above, or this nice post on how to change the backend, might well resolve the problem, I don't see these as rigid solutions. For me, uninstalling matplotlib and reinstalling it was magic and the problem was solved.

pip uninstall matplotlib

... 然后,安装

pip install matplotlib

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


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


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

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

简单的安装

pip3 install PyQt5==5.9.2

这对我很管用。


我添加了%matplotlib内联 我的情节出现在朱庇特笔记本上。


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

tkinter is python version-specific in the sense that sudo apt-get install python3-tk will install tkinter exclusively for your default version of python. Suppose you have different python versions within various virtual environments, you will have to install tkinter for the desired python version used in that virtual environment. For example, sudo apt-get install python3.7-tk. Not doing this will still lead to No module named ' tkinter' errors, even after installing it for the global python version.


这适用于R网状结构。在这里找到的。

1: matplotlib。使用“tkaggs” 前 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()

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')放在所有导入语句之后解决了这个问题。 我使用python 3.8.5 VSCODE和anaconda。 其他花招都没用。


如果您在基于debian的系统上使用pyenv安装python版本,请务必在安装pyenv之前运行sudo apt install tk-dev。如果已经安装,请使用pyenv卸载将其删除,并在安装tk-dev后重新安装。因此,在运行pyenv install时,不需要设置任何env变量。


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

matplotlib.use('Agg')

搜索它并注释掉它。

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

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


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

pip3 install PyQt5

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

%matplotlib inline

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

plt.show()

命令。


对我有效的解决方案是:

安装tkinter 将tkinter导入模块 确保matplotlib使用(TkAgg)而不是(Agg) matplotlib.use(“TkAgg”)


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


绘图前请执行以下命令

%matplotlib inline

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

——编辑

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

第一步:在官方页面Anaconda下载。exe,使用个人版,因为它是免费的Anaconda个人版 步骤2:一旦你安装了程序,打开到env部分

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

步骤3:在本节中创建py env, Anaconda将自动安装开发人员使用的主要库,降低代码出错的风险。 额外的考虑:正如你在下面的快照中看到的,你可以很容易地看到你在conda中安装了哪些库。我得到了你同样的错误,因为我错过了3个libs中的一个

希望是有用的和清楚的理解! 自保”


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

下载并运行官方的python安装程序。即使你 已经下载好了,再运行一次。 当(重新)安装python时,确保您选择了“高级”选项,并且 将“tcl/tk and IDLE”复选框设置为true。 如果你已经安装了python,选择“修改”选项,然后 确保选中了复选框。

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


运行 % matplotlib内联 曾经为我解决了这个问题。 我在这里找到了答案:当我在jupyter笔记本电脑中使用matplotlib时,它总是引发“matplotlib目前正在使用非gui后端”错误? 由用户Mulugeta Weldezgina

在导入时内联添加%matplotlib有助于平滑绘图 笔记本

%matplotlib inline
import matplotlib.pyplot as plt

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

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


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

%matplotlib inline

Try:

%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防御防火墙”中搜索并删除它们。

You will now need to configure Windows Firewall to permit connections from WSL2 to the X11 display server. You will install the display server in the next step. We do this step first to avoid Windows Firewall from auto-creating an insecure firewall rule when you run the X11 display server. Many guides on X11 forwarding and WSL2 make this firewall rule too permissive, allowing connections from any computer to your computer. This means someone could theoretically, if they are on your same network, start sending graphical display information to your computer. To avoid this, we will make Windows Firewall only accept internet traffic from the WSL2 instance. To set this up, you can copy the below to a script and run it from within 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"

手动方法:

Alternatively, you can manually add the rule through a GUI by doing the following: Open "Windows Defender Firewall with Advanced Security" Click add new rule brings up the New Rule Wizard (next to navigate between each section): Rule type: Custom Program: "This program path:" %ProgramFiles%\VcXsrv\vcxsrv.exe Protocol and ports Protocol type: TCP Local port: 6000 Remote port: any Scope Local IP address: Obtain the IP address to put in by running the below command in WSL2 ip route | awk '/^default/ {print $3}' remote IP addresses Obtain IP address to enter by running the below in WSL2 ip addr | awk '/inet / && !/127.0.0.1/ {split($2,a,"/"); print a[1]}' Action: "Allow the connection Profile: Selection Domain, Private, and Public Name: "X11 forwarding"


Ubuntu 20.04命令行设置。我安装了以下程序,以使Matplotlib停止抛出错误UserWarning: Matplotlib目前正在使用agg,这是非gui后端,因此无法显示图形。

我通过以下步骤安装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解决了问题。


这个问题的解决方法是: 确保把这条线放好

%matplotlib inline

在代码头部

像这样

# In an IPython notebook¶
# This magic just sets up matplotlib's interactive mode
%matplotlib inline
# So you have to explicitely import the module into the namespace
import matplotlib.pyplot as pl
import numpy as np
# Create the figure object
fig = pl.figure(figsize=(12, 8))
x = np.arange(0, 4 * np.pi, 0.1)
y = np.sin(x)
pl.plot(x, y)

%matplotlib inline turns on “inline plotting”, where plot graphics will appear in your notebook. This has important implications for interactivity: for inline plotting, commands in cells below the cell that outputs a plot will not affect the plot. For example, changing the color map is not possible from cells below the cell that creates a plot. However, for other backends, such as qt4, that open a separate window, cells below those that create the plot will change the plot - it is a live object in memory. If you are not using matplotlib in interactive mode at all, figures will only appear if you invoke

有关%matplotlib内联的更多信息,请参阅此链接