matplotlib中plot.show()不显示图片的问题:如何把backend=Agg配置为TkAgg

2024-03-15 22:58

本文主要是介绍matplotlib中plot.show()不显示图片的问题:如何把backend=Agg配置为TkAgg,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于matplotlib不显示的问题,碰到过多次,貌似是默认安装使用anaconda时都会碰到,不知道matplotlib为什么一直不解决这个问题。所以记录一下。

默认情况下,matplotlib的backend使用的是agg,或template,此时是无法显示图片的,agg库不支持。

好奇的可以查一下自己的配置文件,如

>>> import matplotlib
>>> matplotlib.matplotlib_fname()
C:\Users\Administrator\.matplotlib\matplotlibrc
也可以使用下面的命令打印出配置,
print(mpl.get_backend())
# it will display Agg if you have a display problem, or otherwise TkAgg etc.
print(mpl.matplotlib_fname())
# it will display the setting file location, e.g.
# C:\Users\Administrator\.matplotlib\matplotlibrc
# the content is simple: "backend      : Agg", just change it to "backend      :TkAgg"

 

解决办法:

先把自己版本所支持的backends打印出来看一下,

>>>import matplotlib.rcsetup as rcsetup
>>>print(rcsetup.all_backends)
['GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template']

例如,把配置文件

C:\Users\Administrator.matplotlib\matplotlibrc

的内容改成正面的情况:

backend      : TkAgg

一般图片就能正常显示了,当然你也可以不停尝试下其他的backends,像有些backends是需要安装 其他支持包的,如cairo。

linux上解决办法也是相同的,只不过配置文件的位置不一样。

 

给几个有用的参考:

https://stackoverflow.com/questions/2130913/no-plot-window-in-matplotlib

https://stackoverflow.com/questions/7534453/matplotlib-does-not-show-my-drawings-although-i-call-pyplot-show

 

附评论里的问题:确定配置为TkAgg,但是在import matplotlib.pyplot as plt之后所显示的终端为agg

这种现象的主要原因,是因为版本冲突。可以这么说,print((matplotlib.matplotlib_fname())打印出来的配置文件,未必是你正在调用的配置文件。

我自己特意在不同环境调试了一下,用一个实际例子来说,在某个非默认的环境,名称为tch37,打印出来的地址为
D:\Anaconda3\envs\tch37\Lib\site-packages\matplotlib\mpl-data\matplotlibrc
通常在窗口命令下用,conda activate tch37之后再用python,是这个环境。

而实际上,我查了一下自己电脑中的版本,
print(matplotlib.__version__)
'3.2.2'
然后我找到这个3.2.2所对应的位置,在这里,
D:\Anaconda3\pkgs\matplotlib-base-3.2.2-py37h64f37c6_0\Lib\site-packages\matplotlib\mpl-data\matplotlibrc
在vscode中,即使我调用tch37这个环境,用的也是3.2.2这个配置。
所以,如果我要在vscode中使用TkAgg,我应该修改的是这个地方的配置。

总结起来就是,出现这种情况,你先找一下,系统里到底有多少个matplotlibrc这样的文件,然后再慢慢查找到底应该修改哪个配置文件。通常默认的配置文件里有这么一句

## You can also deploy your own backend outside of matplotlib by referring to
## the module name (which must be in the PYTHONPATH) as 'module://my_backend'.
#backend : Agg

你把他改成下面这个样子即可,

## You can also deploy your own backend outside of matplotlib by referring to
## the module name (which must be in the PYTHONPATH) as 'module://my_backend'.
backend : TkAgg

至于anaconda何时,在哪里调用哪个地方的配置,这一点估计谁也扯不清楚。

 

临时暴力改变backend

不得不承认,matplotlib(anaconda?)有时无论你怎么配置,就是存在不可思议的一些怪现象。

如果你临时需要转换backend,其实很简单,直接调用
matplotlib.use('Agg')

matplotlib.use('TkAgg')
暴力完成切换即可。

 

官方的说法摘录

参考:https://matplotlib.org/faq/usage_faq.html

There are four ways to configure your backend. If they conflict each other, the method mentioned last in the following list will be used, e.g. calling use() will override the setting in your matplotlibrc.

  1. The backend parameter in your matplotlibrc file (see Customizing matplotlib):

    backend : WXAgg   # use wxpython with antigrain (agg) rendering
    
  2. Setting the MPLBACKEND environment variable, either for your current shell or for a single script:

    > export MPLBACKEND="module://my_backend"
    > python simple_plot.py> MPLBACKEND="module://my_backend" python simple_plot.py
    

    Setting this environment variable will override the backend parameter in any matplotlibrc, even if there is a matplotlibrc in your current working directory. Therefore setting MPLBACKEND globally, e.g. in your .bashrc or .profile, is discouraged as it might lead to counter-intuitive behavior.

  3. To set the backend for a single script, you can alternatively use the -d command line argument:

    > python script.py -dbackend
    

    This method is deprecated as the -d argument might conflict with scripts which parse command line arguments (see issue #1986). You should use MPLBACKEND instead.

  4. If your script depends on a specific backend you can use the use() function:

    import matplotlib
    matplotlib.use('PS')   # generate postscript output by default
    

    If you use the use() function, this must be done before importing matplotlib.pyplot. Calling use() after pyplot has been imported will have no effect. Using use() will require changes in your code if users want to use a different backend. Therefore, you should avoid explicitly calling use() unless absolutely necessary.

 

这篇关于matplotlib中plot.show()不显示图片的问题:如何把backend=Agg配置为TkAgg的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813531

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造