抓住matplotlib警告

时间:2014-03-06 14:18:39

标签: python matplotlib warnings

我有一个代码(如下所示为最小工作示例,MWE),在绘制颜色条时会产生警告:

/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py:1533: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.
  warnings.warn("This figure includes Axes that are not "

我想抓住这个警告,因此不会显示。

我知道我应该按照这个问题How do I catch a numpy warning like it's an exception (not just for testing)?中所述的方式应用某些内容,但我不知道该怎么做。

这是MWE

import matplotlib.pyplot as plt 
import numpy as np
import matplotlib.gridspec as gridspec

x = np.random.randn(60) 
y = np.random.randn(60)
z = [np.random.random() for _ in range(60)]

fig = plt.figure()
gs = gridspec.GridSpec(1, 2)

ax0 = plt.subplot(gs[0, 0])
plt.scatter(x, y, s=20)

ax1 = plt.subplot(gs[0, 1])
cm = plt.cm.get_cmap('RdYlBu_r')
plt.scatter(x, y, s=20 ,c=z, cmap=cm)
cbaxes = fig.add_axes([0.6, 0.12, 0.1, 0.02]) 
plt.colorbar(cax=cbaxes, ticks=[0.,1], orientation='horizontal')

fig.tight_layout()
plt.show()

2 个答案:

答案 0 :(得分:14)

您可能不希望将此警告视为例外情况。这将中断函数调用。

使用warnings标准库模块来控制警告。

您可以使用上下文管理器禁止来自特定函数调用的警告:

import warnings
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fig.tight_layout()

忽略来自matplotlib的所有警告:

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

仅忽略来自matplotlib的UserWarning:

warnings.filterwarnings("ignore", category=UserWarning, module="matplotlib")

答案 1 :(得分:1)

  

通过调用showwarning()来完成警告消息的打印,   可能被覆盖;此函数的默认实现   通过调用formatwarning()来格式化消息,这也是   可供自定义实现使用。

在发出警告时,覆盖showwarning()方法不执行任何操作。该函数在调用时具有可用的警告消息和类别,因此您可以检查并仅隐藏来自matplotlib的警告。

来源:http://docs.python.org/2/library/warnings.html#warnings.showwarning