【问题标题】:How to suppress matplotlib warning?如何抑制 matplotlib 警告?
【发布时间】:2015-11-18 23:24:52
【问题描述】:

每次我import pandas 时都会收到来自matplotlib 的警告:

/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py:872: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.


 warnings.warn(self.msg_depr % (key, alt_key))

抑制它的最佳方法是什么?所有软件包都是最新的。

Conf:OSX 与 brew Python 2.7.10(默认,2015 年 7 月 13 日,12:05:58),以及 pandas==0.17.0 和 matplotlib==1.5.0

【问题讨论】:

  • 你的linux操作系统名称和版本是什么,python版本是什么,matplotlib版本是什么,你的pandas版本是什么?
  • 也许可以试试this?我无法测试它,因为我没有收到相同的警告..
  • 我在 OSX 上使用 brew Python 2.7.10(默认,2015 年 7 月 13 日,12:05:58)和 pandas==0.17.0 和 matplotlib==1.5.0
  • 看看*.com/questions/16170989/…:建议使用matplotlib.use(arg, warn=False, force=False)。见matplotlib.org/api/matplotlib_configuration_api.html首先从matplotlib导入使用,然后调用matplotlib.use(),再从matplotlib导入*。

标签: python pandas matplotlib warnings


【解决方案1】:

您可以隐藏所有警告:

import warnings
warnings.filterwarnings("ignore")

import pandas

【讨论】:

  • 它对我有用,但它会在脚本中存在多长时间。?如果我们升级到 MPL3.3 可以吗?
【解决方案2】:

除了隐藏所有内容之外,您还可以隐藏特定警告。 例如,如果我们只想隐藏 matplotlib 警告:

warnings.filterwarnings( "ignore", module = "matplotlib\..*" )

过滤器可以自定义到发出警告的文件的确切消息和行号,假设它只是一个让您烦恼的警告,而不是matplotlib 作为一个整体。详情请见https://docs.python.org/3/library/warnings.html

【讨论】:

  • 您能否添加一个如何忽略特定 matplotlib 警告的示例?
  • 在尝试此操作后,我仍然收到 matplotlib 弃用警告。
【解决方案3】:

您可以按照 AndreL 的建议隐藏警告消息,也可以解决此特定问题并一劳永逸地停止收到警告消息。如果您想要后者,请执行以下操作。

打开您的matplotlibrc 文件并搜索axes.color_cycle。如果您收到警告消息,则意味着您的 matplotlibrc 文件应显示如下内容:

axes.color_cycle : b, g, r, c, m, y, k  # color cycle for plot lines

你应该用这个替换那行:

axes.prop_cycle : cycler('color', ['b', 'g', 'r', 'c', 'm', 'y', 'k'])

警告信息应该消失了。

【讨论】:

    【解决方案4】:

    您可以通过在适当的位置使用 prop_cycle 来抑制警告 UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.

    比如在你用过color_cycle的地方:

    matplotlib.rcParams['axes.color_cycle'] = ['r', 'k', 'c']
    

    将其替换为以下内容:

    matplotlib.rcParams['axes.prop_cycle'] = mpl.cycler(color=["r", "k", "c"]) 
    

    为了更深入地了解,这里有一个例子:

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    
    mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=["r", "k", "c"]) 
    
    x = np.linspace(0, 20, 100)
    
    fig, axes = plt.subplots(nrows=2)
    
    for i in range(10):
        axes[0].plot(x, i * (x - 10)**2)
    
    for i in range(10):
        axes[1].plot(x, i * np.cos(x))
    
    plt.show()
    

    【讨论】:

      【解决方案5】:

      如果您正在使用日志记录模块,请尝试以下操作: logging.getLogger('matplotlib').setLevel(level=logging.CRITICAL)

      【讨论】: