我正在尝试将使用^{
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
# make up data points
points = np.random.rand(15,2)
# compute Voronoi tesselation
vor = Voronoi(points)
# plot
voronoi_plot_2d(vor)
# colorize
for region in vor.regions:
if not -1 in region:
polygon = [vor.vertices[i] for i in region]
plt.fill(*zip(*polygon))
plt.show()
结果图像:
正如你所看到的,图像边缘的一些Voronoi区域没有着色。这是因为这些区域的Voronoi顶点的一些索引被设置为-1
,即对于Voronoi图之外的那些顶点。根据文件:
regions: (list of list of ints, shape (nregions, *)) Indices of the Voronoi vertices forming each Voronoi region. -1 indicates vertex outside the Voronoi diagram.
为了给这些区域上色,我试着从多边形中移除这些“外部”顶点,但是没有成功。我想,我需要在图像区域的边界处填写一些点,但我似乎无法合理地实现这一点。
有人能帮忙吗?
对于这个问题,我有一个更简单的解决方案,那就是在调用Voronoi算法之前,在点列表中添加4个遥远的虚拟点。
根据你的代码,我加了两行。
然后得到的数字如下所示。
我不认为有足够的信息,从数据中可用的vor结构来解决这个问题,而不做至少一些voronoi计算再次。既然如此,这里是原始voronoi_plot_2d函数的相关部分,您应该能够使用它们来提取与vor.max_bound或vor.min_bound相交的点,vor.max_bound或vor.min_bound是图表的左下角和右上角,以便计算出多边形的其他坐标。
Voronoi数据结构包含构造“无穷远点”位置所需的所有信息。Qhull还将它们简单地报告为
-1
索引,因此Scipy不会为您计算它们。https://gist.github.com/pv/8036995
http://nbviewer.ipython.org/gist/pv/8037100
相关问题 更多 >
编程相关推荐