当前位置: 首页 > 知识库问答 >
问题:

使用matplotlib*而不使用*TCL

韦宏扬
2023-03-14

正是标题所说的。有没有办法在不安装TCL的情况下使用matplotlib库?请不要告诉我咬紧牙关安装TCL——我知道怎么做,但出于我自己(好吧,也许很愚蠢)的原因,我不想这么做。

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

此外,请注意,我正在使用windows-我已经安装了所有可能需要使用pip(Numpy,熊猫,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个答案

东方英豪
2023-03-14

(2018年10月加入回答)

从2018年9月19日发布的Matplotlib 3开始,问题中描述的问题不应该出现。从留档的新部分:

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

无头linux服务器(由未定义的显示环境标识)将不会选择GUI后端。

因此,只要确保没有定义DISPLAY,在无头Linux服务器上运行脚本时,后端就不会遇到任何问题。

(原始答复2016年5月)

加载matplotlib后,立即输入

matplotlib.use('Agg')

如果有的话,在加载pyplod之前执行此操作。

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

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

backend : Agg

有关详细信息,请参阅关于什么是后端?的Matplotlib用法常见问题解答?。

 类似资料:
  • 我需要在没有MediaExtractor的情况下使用MediaCodec,并且我正在使用FileInputStream读取文件。目前它不工作,它正在屏幕上显示一个绿色的加扰图像。 如果我使用MediaExtractor,一切都正常。我在使用MediaExtractor时通过查看MediaFormat获得SPS/PPS值。如果我删除下面的部分,屏幕上不会显示任何内容。 我错过了什么?在没有Media

  • 问题内容: Javascript 1.9.3 / ECMAScript5引入了DouglasCrockford等人提倡很长时间的技术。如何在下面的代码中替换为? (假设存在)。 我能想到的最好的是: 似乎没有任何优势,所以我想我没有。我可能太新古典了。我应该如何使用来创建用户“ bob”? 问题答案: 仅具有一个继承级别,您的示例可能无法让您看到的真正好处。 通过此方法,您可以轻松实现 差异继承

  • 问题内容: 每当我读到关于使用Scala的作者通常提的是演员,而应使用(此举例)。虽然我大致了解了Actor的工作原理,但我真的很想看到一个Actor的示例,该示例被用来在一段代码中替换Java的方法修饰符(这意味着它的Scala等效项- 块)。例如,修改数据结构的内部将很高兴。 这是对Actor的很好利用,还是我被误导了? 问题答案: Actor保证一次只处理一条消息,这样就不会有两个线程访问任

  • 问题内容: 知道 对于声明为volatile的所有变量,读写是原子的 问题1: 这是否可以理解为 操作是原子的吗? 然后 将变量标记为volatile并不能消除所有同步原子操作的需要,因为仍然可能发生内存一致性错误。 问题2: 我想知道在什么情况下(如果有的话)有可能看到一个已标记的变量,而看不到任何标记为已同步的块的方法(试图访问/修改该变量)? 换句话说,是否需要标记所有需要防止并发修改的变量

  • 我是说替换 只要 在班上名列前茅。对我有用。 请给出你的建议。 使用SpringJunit4ClassRunner.class而不是MockitoJunitRunner.class

  • NumPy有一个numpy.histogram()函数,它是数据频率分布的图形表示。 相等水平尺寸的矩形对应于称为bin类间隔和对应于频率的variable height 。 numpy.histogram() numpy.histogram()函数将输入数组和bin作为两个参数。 bin数组中的连续元素充当每个bin的边界。 import numpy as np a = np.array([2