Gabriel Gabriel - 6 days ago 6
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

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")
Comments