You are reading an old version of the documentation (v3.1.3). For the latest version see https://matplotlib.org/stable/gallery/images_contours_and_fields/contour_label_demo.html
Version 3.1.3
matplotlib
Fork me on GitHub

Table of Contents

Related Topics

Contour Label Demo

Illustrate some of the more advanced things that one can do with contour labels.

See also the contour demo example.

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

Define our surface

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

Make contour labels using creative float classes Follows suggestion of Manuel Metz

# Define a class that forces representation of float to look a certain way
# This remove trailing zero so '1.0' becomes '1'


class nf(float):
    def __repr__(self):
        s = f'{self:.1f}'
        return f'{self:.0f}' if s[-1] == '0' else s


# Basic contour plot
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)

# Recast levels to new class
CS.levels = [nf(val) for val in CS.levels]

# Label levels with specially formatted floats
if plt.rcParams["text.usetex"]:
    fmt = r'%r \%%'
else:
    fmt = '%r %%'

ax.clabel(CS, CS.levels, inline=True, fmt=fmt, fontsize=10)
../../_images/sphx_glr_contour_label_demo_001.png

Out:

<a list of 7 text.Text objects>

Label contours with arbitrary strings using a dictionary

fig1, ax1 = plt.subplots()

# Basic contour plot
CS1 = ax1.contour(X, Y, Z)

fmt = {}
strs = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh']
for l, s in zip(CS1.levels, strs):
    fmt[l] = s

# Label every other level using strings
ax1.clabel(CS1, CS1.levels[::2], inline=True, fmt=fmt, fontsize=10)
../../_images/sphx_glr_contour_label_demo_002.png

Out:

<a list of 3 text.Text objects>

Use a Formatter

fig2, ax2 = plt.subplots()

CS2 = ax2.contour(X, Y, 100**Z, locator=plt.LogLocator())
fmt = ticker.LogFormatterMathtext()
fmt.create_dummy_axis()
ax2.clabel(CS2, CS2.levels, fmt=fmt)
ax2.set_title("$100^Z$")

plt.show()
../../_images/sphx_glr_contour_label_demo_003.png

References

The use of the following functions, methods and classes is shown in this example:

Out:

<function TickHelper.create_dummy_axis at 0x7f18a849ba60>

Keywords: matplotlib code example, codex, python plot, pyplot Gallery generated by Sphinx-Gallery