Python >> Tutoriel Python >  >> Python Tag >> Matplotlib

Tracer un multipolygone galbé à l'aide de Matplotlib

Galbé Polygon l'objet a l'attribut exterior . Galbé MultiPolygon l'objet a Polygon séquence d'objets. Vous devriez itérer sur ces polygones. Vous pouvez le faire en utilisant l'attribut geoms de MultiPolygon .

Utilisez cette méthode :

import shapely.geometry as sg
import shapely.ops as so
import matplotlib.pyplot as plt

r1 = sg.Polygon([(0,0),(0,1),(1,1),(1,0),(0,0)])
r2 = sg.box(0.5,0.5,1.5,1.5)
r3 = sg.box(4,4,5,5)

new_shape = so.cascaded_union([r1, r2, r3])
fig, axs = plt.subplots()
axs.set_aspect('equal', 'datalim')

for geom in new_shape.geoms:    
    xs, ys = geom.exterior.xy    
    axs.fill(xs, ys, alpha=0.5, fc='r', ec='none')

plt.show()


Une manière alternative et plus courte de tracer en utilisant la réponse de @ Kadir Şahbaz :

new_shape = so.cascaded_union([r1, r2, r3])

# Plot each polygon shape directly
for geom in new_shape.geoms:
    plt.plot(*geom.exterior.xy)

# Set (current) axis to be equal before showing plot
plt.gca().axis("equal")
plt.show()

Regardez Plot shapefile avec des îles avec matplotlib par exemple.

Comme pour les polygones, vous pouvez utiliser des chemins et des correctifs matplotlib et il existe un module Python dédié au tracé de polygones à partir de fichiers de formes à l'aide de ces fonctions Descartes.

new_shape= so.unary_union([r1, r2, r3])
from descartes import PolygonPatch
import matplotlib.pyplot as plt
BLUE = '#6699cc'
GRAY = '#999999'
fig = plt.figure() 
ax = fig.gca() 
ax.add_patch(PolygonPatch(new_shape, fc=GRAY, ec=BLUE, alpha=0.5, zorder=2 ))
ax.axis('scaled')
plt.show()