我正在尝试使用 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。
我想知道如何解决这个问题以便能够显示图表。
解决方案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 后端。
就我而言,错误消息暗示我在无头控制台中工作。所以 plt.show()
无法工作。有效的是调用 plt.savefig
:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [5, 7, 4])
plt.savefig("mygraph.png")
我在 github repository 上找到了答案。
如果您使用 Arch Linux(像 Manjaro
或 Antegros
这样的发行版),只需输入:
sudo pacman -S tk
一切都会完美无缺!
简单安装
pip3 install PyQt5==5.9.2
这个对我有用。
试试 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。
sudo apt-get install python3-tk
答案已经给出了几次,但并不明显,需要安装图形,这可行。
pip3 install PyQt5
我在 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 并运行你的代码,它将工作
我添加了 %matplotlib inline
,我的情节出现在 Jupyter Notebook 中。
这适用于 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()
如果使用 Jupyter 笔记本,请尝试以下操作:
%matplotlib inline
即使没有指定
plt.show()
命令。
issue = “UserWarning:Matplotlib 当前正在使用 agg,这是一个非 GUI 后端,因此无法显示该图。”
这对我有用
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Qt5Agg')
对于 Windows 10,如果使用 pip install tk
对您不起作用,请尝试:
下载并运行适用于 windows 的官方 python 安装程序。即使您已经下载了它,请再次运行它。
当(重新)安装 python 时,请确保您选择了“高级”选项,并将复选框“tcl/tk and IDLE”设置为 true。
如果您已经安装了 python,请选择“修改”选项,并确保选中该复选框。
我的修复来源:https://stackoverflow.com/a/59970646/2506354
使用 Pycharm 专业版 2021.3 时,这些答案都不适合我
常规的 matplotlib 图表确实适用于科学视图,但它不允许我在图表中添加图像。
对我有用的是在我尝试绘制任何东西之前添加这条线:
plt.switch_backend('TkAgg')
我通过将 matplotlib.use('TkAgg')
放在所有 import 语句之后来解决它。我使用 python 3.8.5 VSCODE 和 anaconda。没有其他技巧奏效。
我在 Ubuntu 20.04 上安装了 python3-tk
并使用 WSL2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use( 'tkagg')
然后我从 Windows Store 安装了 GWSL,这似乎解决了开箱即用的 WSL2 渲染问题
@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 版本安装它之后也是如此。
在 Mac OS 上,我使它适用于:
import matplotlib
matplotlib.use('MacOSX')
这将解决问题。它在 jupyter 中运行良好。
%matplotlib inline
以防万一这对任何人都有帮助。
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 现在已准备就绪。
在升级了许多包(Spyder
3 到 4、Keras
和 Tensorflow
以及它们的许多依赖项)之后,我今天遇到了同样的问题!我无法弄清楚发生了什么;但是一直使用 Spyder
3 的(基于 conda 的)虚拟环境没有问题。尽管安装 tkinter
或更改后端、如上所示的 via matplotlib.use('TkAgg)
或 how to change the backend 上的这篇不错的帖子可能会很好地解决问题,但我不认为这些是死板的解决方案。对我来说,卸载 matplotlib
并重新安装它很神奇,问题就解决了。
pip uninstall matplotlib
...然后,安装
pip install matplotlib
综上所述,这可能是一个包管理问题,顺便说一句,我尽可能同时使用 conda
和 pip
。
您可以使用从 agg
到 Tkinter TKAgg
使用命令使用后端更改 matplotlib
matplotlib.use('TKAgg',warn=False, force=True)
如果您在项目中使用一些第三方代码,则可以使用。它可能包含以下行
matplotlib.use('Agg')
搜索它并将其注释掉。
如果您不知道它是什么,您可能没有使用这部分代码。
使用另一个后端 GUI 的解决方案可能更简洁,因此请选择您的战斗机。
绘图前执行以下命令
%matplotlib inline
尝试:
%matplotlib inline
我有同样的问题,它对我有用。我在我的 Jupyter 笔记本和 Visual Studio 代码上对其进行了测试,所以你应该没有问题。
在带有 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 转发”
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
Linux Mint 19. 对我有帮助:
sudo apt install tk-dev
PS 安装包后重新编译 python 解释器。
当我在 Spyder 上遇到此错误时,我从逐行运行代码更改为突出显示我的绘图代码块并一次运行所有代码。瞧,图像出现了。
如果您在基于 Debian 的系统上使用 pyenv 安装 python 版本,请确保在 pyenv install
之前运行 sudo apt install tk-dev
。如果已安装,请使用 pyenv uninstall
将其删除,并在安装 tk-dev
后重新安装。因此,运行 pyenv install
时无需设置任何环境变量。
对我有用的解决方案:
将 tkinter import tkinter 安装到模块中,确保 matplotlib 使用 (TkAgg) 而不是 (Agg) matplotlib.use('TkAgg')
不定期副业成功案例分享
import matplotlib
和matplotlib.use('TkAgg')
)python3-matplotlib-tk
。tkinter
是特定于 python 版本的,因为这个特定的命令将专门为您的默认 python 版本安装tkinter
。假设您为各种虚拟环境安装了不同的 python 版本。在这种情况下,您必须为该工作 venv 中使用的所需 python 版本安装它。例如,在我的例子中:sudo apt-get install python3.7-tk
。不知道这一点让我在合理的时间内没有遇到模块名称“tkinter”错误,即使在为我的全局 python 版本安装它之后也是如此。sudo apt-get install python3.8-tk