使用matplotlib *而不使用* TCL

时间:2016-05-26 11:20:04

标签: python numpy matplotlib tcl

正如标题所说的那样。有没有办法在没有安装TCL的情况下使用matplotlib库?请不要告诉我咬紧牙关并安装TCL - 我知道如何做,但我自己(可能是愚蠢的)我不想做的原因。

我不在乎显示情节,我只想在png中输出它们。我尝试了各种各样的东西(使用不同的后端等),但是matplotlib总是想找到tcl工作:(为什么TCL对matplotlib如此重要?

另外,请注意我正在使用Windows - 我已经使用pip安装了所有可能需要的东西(numpy,pandas,matplotlib)。

@ gerrit的解决方案是正确的(我试图改变后端,但是在
加载pyplot后我正在做 - 重要的是你需要更改在使用matplotlib后立即后端)。这是一个使用它的小例子:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

fig, ax = plt.subplots( nrows=1, ncols=1 )
ax.plot([0,1,2], [10,20,3])

fig.savefig('foo.png')
plt.close(fig)

这将输出名为' foo.png'的文件。不使用TCL \ o /

1 个答案:

答案 0 :(得分:14)

Matplotlib 3.0及更新版

(2018年10月补充回答)

从2018年9月19日发布的Matplotlib 3开始,不应出现问题中描述的问题。来自what's new part of the documentation

  

默认后端不再必须设置为构建过程的一部分。相反,在运行时,内置后端将按顺序尝试,直到其中一个导入。

     

无头linux服务器(由DISPLAY env标识未定义)不会选择GUI后端。

因此,只要您确定未定义DISPLAY,在无头Linux服务器上的脚本中运行时,不应该遇到后端的任何问题。

Matplotlib 2.2及更早版本

(原始答案2016年5月)

加载matplotlib后,立即输入

matplotlib.use('Agg')

在加载pyplot之前执行此操作(如果有的话)。

默认情况下,Matplotlib使用TkAgg后端,后端需要Tcl。如果您不想显示图表,Agg就可以了。其他替代方案包括WXQTAgg,但两者都需要安装其他库。

或者,您可以在matplotlibrc文件中设置此指令:

backend : Agg

有关详细信息,请参阅后端的Matplotlib Usage FAQ