python数据可视化技巧的100个练习 -- 29. 使用 Voronoi 图可视化空间数据
重要性★★★★☆
难度★★★☆☆
一家房地产公司希望分析其在城市的房产分布,并确定每处房产的影响力区域。
他们要求你创建一个 Voronoi 图来可视化这些信息。
你的任务是:
- 生成一个包含 20 处房产的随机位置(x 和 y 坐标)的数据集,这些位置位于一个 100x100 的网格内。
- 绘制 Voronoi 图,显示房产位置为点,Voronoi 单元格以不同颜色显示。
使用 Python 完成此任务,专注于数据操作和可视化技术。
确保在代码中生成输入数据。
【数据生成代码示例】
import numpy as npnp.random.seed(42)properties = np.random.rand(20, 2) * 100
【图表答案】
【代码答案】
import numpy as npimport matplotlib.pyplot as pltfrom scipy.spatial import Voronoinp.random.seed(42)properties = np.random.rand(20, 2) * 100vor = Voronoi(properties)fig, ax = plt.subplots(figsize=(10, 10))# 绘制 Voronoi 图regions = [r for r in vor.regions if -1 not in r and r]for region in regions: polygon = [vor.vertices[i] for i in region] plt.fill(*zip(*polygon), alpha=0.4)# 绘制房产位置plt.plot(properties[:, 0], properties[:, 1], 'ko', markersize=8)plt.title('房产分布及影响力区域')plt.xlabel('X 坐标')plt.ylabel('Y 坐标')plt.xlim(0, 100)plt.ylim(0, 100)# 添加图例plt.plot([], [], 'ko', label='房产')plt.plot([], [], color='C0', alpha=0.4, linewidth=10, label='影响力区域')plt.legend()plt.show()
这段代码展示了如何使用 Python 创建 Voronoi 图来可视化空间数据。
让我们逐步分析这个过程:
数据生成
我们使用 NumPy 生成随机数据点,表示房产位置。
np.random.rand(20, 2) * 100 创建了 20 对 0 到 100 之间的随机坐标。
我们设置了随机种子以确保结果可复现。
导入库
我们导入了 NumPy 用于数据操作,Matplotlib 用于绘图,以及 SciPy 的 Voronoi 函数用于创建 Voronoi 图。
创建 Voronoi 图
我们使用 Voronoi(properties) 根据房产位置计算 Voronoi 图。
设置图表
我们使用 plt.subplots() 创建一个指定大小的新图形和坐标轴。
绘制 Voronoi 单元格
我们遍历 Voronoi 区域,排除包含 -1(表示无穷大)的区域。
对于每个区域,我们使用顶点坐标创建一个多边形,并用半透明颜色填充。
绘制房产位置
我们使用 plt.plot() 添加黑色点('ko')表示房产位置。
添加标签和标题
我们设置了标题、x 轴标签和 y 轴标签,为可视化提供上下文。
设置图表范围
我们使用 plt.xlim() 和 plt.ylim() 将图表边界设置为与数据范围匹配(0 到 100)。
添加图例
我们使用 plt.plot([], []) 创建虚拟图例条目,分别表示房产和影响力区域。
显示图表
最后,我们调用 plt.show() 显示完成的 Voronoi 图。
这段代码展示了 Python 数据可视化的几个关键方面:
生成的 Voronoi 图有效地可视化了房产分布及其影响力区域,提供了空间数据的清晰直观表示。
【小知识】
Voronoi 图以乌克兰数学家 Georgy Voronoi 的名字命名,他在 1908 年定义并研究了这些结构。
Voronoi 图的应用范围远远超出房地产,包括:
Voronoi 图的对偶图称为 Delaunay 三角剖分,在计算几何学中也有其重要应用。
Voronoi 图可以扩展到三维或更多维度,尽管可视化变得更加困难。
在计算几何学中,使用 Fortune 算法在二维空间中为 n 个点构建 Voronoi 图的时间复杂度为 O(n log n)。
Voronoi 图的概念出现在自然中,例如长颈鹿斑点的图案或蜂窝的结构。
在机器学习中,Voronoi 图与 k-最近邻算法相关,可用于空间分类问题。