首页 文章

使用matplotlib *而不使用* TCL

提问于
浏览
7

正是 Headers 所说的 . 有没有办法在不安装TCL的情况下使用matplotlib库?请不要't tell me to bite the bullet and install TCL - I know how to do it but for my own (ok maybe silly) reasons I don'吨 .

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

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

@ 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 回答

  • 13

    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在什么是后端?

相关问题