在使用matplotlib生成图像时可能会遇到如下错误:

_tkinter.TclError: no display name and no $DISPLAY environment variable

 这是由于matplotlib的backend设置问题造成的。

Backend

matplotlib面向不同的用例和输出格式。有的是通过python的命令行交互式地使用matplotlib,并在输入命令时弹出绘图窗口。有的是将matplotlib嵌入到诸如wxpython、pygtk等图形用户截面中来构建丰富的应用程序。有的是在批处理脚本中使用matplotlib从一些数值模拟中生成postscript图像以及web应用服务动态生成图像。

为了支持所有这些用例,matplotlib可以面向不同的输出,每一种都称为后端“backend”。backend在幕后做所有的制作图形的工作。后端分为交互式和非交互式两种。交互式用于pygtk、wxpython、tkinter、qt4或macosx,也称为用户界面后端。非交互式是指PNG、SVG、PDF、PS等,也称为硬拷贝后端。

后端有四种设置方式 ,按优先级从低到高列出,当四种方式有冲突时,以优先级高的设置为准。

1.matplotlibrc文件中的backend配置, 如:

backend : Agg

2. 为当前shell或脚本设置MPLBACKEND环境变量。即使当前工作目录中有matplotlibrc文件也会被环境变量覆盖,如:

#当前shell
export MPLBACKEND=Agg
#只为当前脚本test.py
MPLBACKEND=Agg python test.py

3.设置单个脚本的后端还可以在运行脚本时使用-d命令行参数,但是-d参数可能与解析命令行参数的脚本冲突,所以不推荐使用这种方式,如:

python test.py -dbackend Agg

4.如果脚本依赖于特定的后端,可以使用use()函数,如:

import matplotlib
matplotlib.use('Agg') 

如果使用use()函数,则必须在导入matplotlib.pyplot之前执行此操作,否则use函数无效。使用use函数时如果想要使用不同的后端需要更改代码。因此,如无必要,应该避免显式调用use()。

解决办法

解决办法就是设置合适的backend,如果不想更改matplotlib的默认设置,可以使用第二种方式。

其他

matplotlib按以下顺序查找matplotlibrc文件:

1.当前工作目录中,通常用于不希望应用于其他地方的特殊定制。

2.$MATPLOTLIBRC/matplotlibrc。

3.用户目录下,在Linux和FreeBSD上可能是在.config/matplotlib/matplotlibrc(或$XDG_CONFIG_HOME/matplotlib/matplotlibrc)。在其他平台上可能是.matplotlib/matplotlibrc。

4.Python安装目录下的site-packages/matplotlib/mpl-data/matplotlibrc。每次安装matplotlib时,都会覆盖该文件,因此,如果希望保存自定义,需要将该文件移动到特定的用户目录下。

GitHub 加速计划 / ar / Aria
5.52 K
861
下载
下载可以很简单
最近提交(Master分支:3 个月前 )
b0d3c6dd - 5 个月前
8fd9634d - 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐