<p>Numpy允许通过条件过滤点。例如<code>points[num_neigh <= 5]</code>将收集具有5个或更少邻居的所有点,前提是<code>num_neigh</code>是包含每个点的邻居数的numpy数组</p>
<p><code>num_neigh</code>可以计算为<code>tri.vertex_neighbor_vertices[0]</code>中连续条目之间的差值,因此<code>num_neigh = np.diff(tri.vertex_neighbor_vertices[0])</code></p>
<p>下面的代码使用<code>plt.scatter</code>绘制带有较大点的点。代码假定<code>coords</code>中的第一个维度表示某种层。注意,在Python中,建议直接使用元素而不是通过索引编写循环。问题不是很清楚,每一层是否应该是一个单独的地块,或者它们是否应该组合在子地块中</p>
<pre class="lang-py prettyprint-override"><code>import matplotlib.pyplot as plt
from scipy.spatial import Delaunay
import numpy as np
coords = np.random.uniform(0, 10, size=(1, 40, 2))
for points in coords:
tri = Delaunay(points[:, :2], qhull_options=('Qz'))
num_neigh = np.diff(tri.vertex_neighbor_vertices[0])
plt.triplot(points[:, 0], points[:, 1], tri.simplices, linestyle=' ')
for filter, color in zip([num_neigh <= 5, num_neigh == 6, num_neigh >= 7], ['lime', 'crimson', 'gold']):
plt.scatter(points[filter, 0], points[filter, 1], s=80, color=color, zorder=2)
plt.gca().set_aspect('equal', 'box') # equal axes needed because Delaunay depends on the scales
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/U8iEo.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/U8iEo.png" alt="example plot"/></a></p>