我有一个代码(如下所示为最小工作示例,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()
答案 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