Matplotlib set_clip_path требует патча для построения

Я только что обнаружил хороший способ создания контурного графика, заполненного Matplotlib, обрезанного до произвольной многоугольной области. Метод требует вызоваset_clip_path(patch) на каждом экземпляре PathCollection в QuadContourSet, возвращенном Matplotlib'scontourf() функция. MWE:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.path as mpath

# some arbitrary data to plot
xx, yy = np.meshgrid(np.linspace(-5, 5, 20), np.linspace(-10, 10, 20), copy=False)
zz = np.sqrt(xx ** 2 + yy ** 2)

poly_verts = [
    (0, 0),
    (-4, 7),
    (-4, -7),
    (4, -7),
    (4, 7),
    (0, 0)
]
poly_codes = [mpath.Path.MOVETO] + (len(poly_verts) - 2) * [mpath.Path.LINETO] +
mpath.Path.CLOSEPOLY]

# create a Path from the polygon vertices
path = mpath.Path(poly_verts, poly_codes)

# create a Patch from the path
patch = mpatches.PathPatch(path, facecolor='none', edgecolor='k')

plt.figure()
ax = plt.gca()
cont = plt.contourf(xx, yy, zz, 50)

# add the patch to the axes
ax.add_patch(patch)  ## TRY COMMENTING THIS OUT
for col in cont.collections:
    col.set_clip_path(patch)

plt.show()

Я запутался в одном аспекте: если я закомментирую строку, на которой изображен патч, то ни одно из отсечек не сработает, и я получу пустой график. Я предполагаю, что при вызове метода set_clip_path с патчем для PathCollection, патч должен быть добавлен к осям, но я не понимаю, почему. настройкаedgecolor='none' для создания патча это хороший обходной путь, но где в этом удовольствие?

Какие-нибудь мысли?

Ответы на вопрос(1)

Ваш ответ на вопрос