Gabriel Gabriel - 8 months ago 114
Python Question

Catch matplotlib warning

I have a code (shown below as a minimal working example,

MWE
) which produces a warning when plotting a colorbar:

/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 "


I want to catch this warning so it is not displayed.

I know I should apply something along the lines of what is stated in this question How do I catch a warning in python like it's an exception? Not just for testing, but I'm not sure how to do it.

Here's the
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()

Answer Source

You probably don't want to catch this warning as an exception. That will interrupt the function call.

Use the warnings standard library module to control warnings.

You can suppress a warning from a specific function call using a context manager:

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

To ignore all warnings from matplotlib:

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

To ignore only UserWarnings from matplotlib:

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