_tkinter.TclError: no display name and no $DISPLAY environment variable解决办法
在使用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时,都会覆盖该文件,因此,如果希望保存自定义,需要将该文件移动到特定的用户目录下。
更多推荐
所有评论(0)