Matplotlib set_clip_path erfordert das Zeichnen eines Patches
Ich habe gerade eine gute Möglichkeit gefunden, ein mit Matplotlib gefülltes Konturdiagramm zu erstellen, das auf einen beliebigen polygonalen Bereich zugeschnitten ist. Die Methode erfordert den Aufruf vonset_clip_path(patch)
für jede PathCollection-Instanz im QuadContourSet, die von Matplotlibs @ zurückgegeben wicontourf()
Funktion. 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()
Ich bin verwirrt über einen Aspekt: Wenn ich die Zeile auskommentiere, in der der Patch eingezeichnet ist, funktioniert keiner der Ausschnitte und ich erhalte einen leeren Plot. Ich gehe davon aus, dass beim Aufrufen der set_clip_path-Methode mit einem Patch in der PathCollection der Patch den Achsen hinzugefügt wurde, aber ich verstehe nicht, warum. Einstellungedgecolor='none'
für die Patch-Erstellung ist eine gute Umgehung, aber wo ist der Spaß dabei?
Irgendwelche Gedanken?