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

Matplotlib:删除关于matplotlib.use的警告()

方高丽
2023-03-14

在我使用matplotlib的Python模块中,我希望确保在通过ssh在远程机器上运行脚本时,它也能工作。因此,我:

import matplotlib
matplotlib.use('Agg')
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import numpy as np
import pylab
import scipy.stats
import scipy.stats.mstats

它起作用了。太糟糕了,当我直接在机器上运行它时(不是远程机器!),它给了我以下警告:

这是对matplotlib的调用。use()无效,因为已经选择了后端;matplotlib。必须在pylab、matplotlib之前调用use()。pyplot或matplotlib。后端是第一次导入的。

如何删除此消息?

共有2个答案

羊昊苍
2023-03-14

警告消息通常很重要,我建议不要忽略。我在用sphinx搜索我的文档构建解决方案时发现了您的问题。我收到了一条类似的信息,以及一些警告的附加上下文:

UserWarning:
This call to matplotlib.use() has no effect because the backend has already
been chosen; matplotlib.use() must be called before pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.

The backend was originally set to 'Qt5Agg' by the following code:
File "setup.py", line 131, in <module>
'psql' : ['psycopg2>=2.7.1'],

然后我找到了一个解决方案https://github.com/conchoecia/pauvre/issues/18.随附进口订单如下:

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

在修复之前,我只有以下模块的导入

from mymod.utils import plotutils
import mymod.plots as plots
import matplotlib.pyplot as plt

我认为这个问题的进口订单导致了警告信息。但是,我无法为所提供的信息重新创建您的警告。如果能从那个警告中再看到几行,那就太好了。

在与其他开发人员进行了更多的讨论之后,很明显我导入的pyplot在文件中,而它属于我需要使用plt的模块中。

理解渲染很重要,你可以在https://matplotlib.org/faq/usage_faq.html#what-is-a-backend和https://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.use得到更多。请记住,其他进程代码可能会更改或默认后端名称。

魏君博
2023-03-14

虽然我不能测试这个,但Ipython告诉我“可以设置warn=False来支持警告。”

资料来源:

matplotlib.use?

Type:       function
String Form:<function use at 0x98da02c>
File:       /usr/lib/pymodules/python2.7/matplotlib/__init__.py
Definition: matplotlib.use(arg, warn=True)
Docstring:
Set the matplotlib backend to one of the known backends.

The argument is case-insensitive.  For the Cairo backend,
the argument can have an extension to indicate the type of
output.  Example:

    use('cairo.pdf')

will specify a default of pdf output generated by Cairo.

.. note::

    This function must be called *before* importing pyplot for
    the first time; or, if you are not using pyplot, it must be called
    before importing matplotlib.backends.  If warn is True, a warning
    is issued if you try and call this after pylab or pyplot have been
    loaded.  In certain black magic use cases, e.g.
    :func:`pyplot.switch_backends`, we are doing the reloading necessary to
    make the backend switch work (in some cases, e.g. pure image
    backends) so one can set warn=False to supporess the warnings.

To find out which backend is currently set, see
:func:`matplotlib.get_backend`.

在文档中发现打字错误总是很有趣的。

 类似资料:
  • 问题内容: 我有一个Semilogx图,我想删除xticks。我试过了: 网格消失(确定),但仍保留小刻度线(在主刻度线的位置)。如何删除它们? 问题答案: 该方法对于这样的事情非常有用。此代码关闭主要和次要刻度线,并从x轴删除标签。

  • Navicat Monitor 在检测到服务器出现问题时会发出警报。警报有两种类型:“警告”(橙色)和“严重”(红色)。警告警报不会影响服务器的性能,但可能存在问题并需要调查。严重警报则表示发生影响或将影响服务器性能的严重问题,而这些问题需要立即关注。 当引发警报时,它会显示在警报历史记录页面和概览仪表板上,并将发送通知给指定的组成员或特定人员。 你可以为特定实例和组自定义阈值以触发警报,并设置向

  • 问题内容: 我有一些PHP代码。当我运行它时,出现警告消息。 如何删除/禁止/忽略这些警告消息? 问题答案: 您确实应该修复引起警告的所有内容,但是可以使用来控制错误的可见性。要跳过警告消息,您可以使用以下方法:

  • 问题内容: 我该如何删除matplotlib轴的一条线(或多条线),使其实际上收集到垃圾并释放回内存?以下代码似乎删除了该行,但是从不释放内存(即使显式调用) 问题答案: 我正在展示 和结合使用的技巧。 我检查了您的大型数据集,并在系统监视器上也确认了内存的释放。 当然,更简单的方法(当不进行故障排除时)是从列表中弹出它并在不创建硬引用的情况下调用该行对象:

  • 问题内容: 我希望UserAcounts可以有许多UserGroups,而所有Groups可以有许多Users。还有一个联接表。我希望在删除useraccount时删除联接表中useraccount和usergroup之间的关系。 实际上,我想使用“在删除级联上”。在ManyToMany关系中,我不会不幸地运行它。我已经尝试了很多事情,但没有找到解决方案。 注意:我只想在删除级联上删除关系 是否有

  • 问题内容: 我试图做一个简单的例子,以学习如何从父表中删除一行并使用Doctrine2自动删除子表中的匹配行。 这是我正在使用的两个实体: Child.php: 父亲.php 这些表已在数据库上正确创建,但未创建“删除级联”选项。我究竟做错了什么? 问题答案: 在教义中有两种级联: 1)ORM级别- 在关联中使用- 这是在UnitOfWork中完成的计算,不影响数据库结构。删除对象时,UnitOf