3

我需要绘制一个不连贯的圆圈列表,这些圆圈是我为其他目的而创建的。

我试图完全按照http://toblerity.org/shapely/manual.html#cascading-unions中的示例进行操作(请参阅代码),但只有当圆圈重叠并且整体连接时才有效(这不是在我的情况下)。正如您通过替换线所看到的

polygons = [Point(i, 0).buffer(0.7) for i in range(5)]

polygons = [Point(i, 0).buffer(0.7) for i in (0,4)]

与笛卡儿(或者如果有人将笛卡儿断言作为测试注释掉,matplotlib 失败)打破并AssertionError因为它不是多边形的东西assert vertices.ndim == 2

查看matplotlib.path.Path的文档,似乎可以使用 MOVETO 来实现这一目标,但 shapely 似乎不支持它。这个对吗?我有什么解决方法?

4

1 回答 1

5

以下代码有效:

from shapely.ops import cascaded_union
from shapely.geometry import Point
import random
from matplotlib.patches import Polygon
import pylab as pl
import numpy as np

circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) 
            for i in range(100)]

polygons = cascaded_union(circles)

fig, ax = pl.subplots(figsize=(8, 8))

for polygon in polygons:
    mpl_poly = Polygon(np.array(polygon.exterior), facecolor="g", lw=0, alpha=0.4)
    ax.add_patch(mpl_poly)

ax.relim()
ax.autoscale()

输出:

在此处输入图像描述

于 2014-12-21T04:24:46.920 回答