Voronoi图在scipy中给出了意想不到的结果

z4bn682m  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(216)

我有以下的pandas框架:

  1. import pandas as pd
  2. pd.DataFrame({'cl': {0: 'A', 1: 'C', 2: 'H', 3: 'M', 4: 'S'},
  3. 'd': {0: 245.059986986012,
  4. 1: 320.49044143557785,
  5. 2: 239.79023081978914,
  6. 3: 263.38325791238833,
  7. 4: 219.53334398353175},
  8. 'p': {0: 10.971011721360075,
  9. 1: 10.970258360366753,
  10. 2: 13.108487516946218,
  11. 3: 12.93241352743668,
  12. 4: 13.346107628161008}})
  13. cl d p
  14. 0 A 245.059987 10.971012
  15. 1 C 320.490441 10.970258
  16. 2 H 239.790231 13.108488
  17. 3 M 263.383258 12.932414
  18. 4 S 219.533344 13.346108

字符串
我想创建一个Voronoi图。为此,我使用package from scipy
我使用以下代码:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy.spatial import Voronoi, voronoi_plot_2d
  4. centers2 = np.array(
  5. centers_dt[['d', 'p']]
  6. )
  7. scatter_x = np.array(centers_dt['d'])
  8. scatter_y = np.array(centers_dt['p'])
  9. group = np.array(centers_dt['cl'])
  10. cdict = {'C': 'red', 'A': 'blue', 'H': 'green', 'M': 'yellow', 'S': 'black'}
  11. fig, ax = plt.subplots()
  12. for g in np.unique(group):
  13. ix = np.where(group == g)
  14. ax.scatter(scatter_x[ix], scatter_y[ix], c = cdict[g], label = g, s = 100)
  15. ax.legend()
  16. vor = Voronoi(centers2)
  17. fig = voronoi_plot_2d(vor,plt.gca())
  18. plt.show()
  19. plt.close()


但我得到的结果是出乎意料的:


的数据
因为有一个寄宿生失踪加上寄宿生似乎有点小康。
有什么想法吗?

n3ipq98p

n3ipq98p1#

voronoi_plot_2d中的代码绘制了有限长度的线段,即使是应该延伸到无穷大的边界。voronoi_plot_2d选择的默认轴限制可能不会在图中显示边界线段,因为vorono_plot_2d选择的有限长度太小,无法延伸到显示的窗口中。
这是我从你的代码中得到的图,如果我添加plt.ylim(-400, 400)


的数据
请注意,从最低交点向上延伸的虚线应该继续向上延伸到无穷远,但代码只绘制了有限的线段。
还要注意的是,坐标轴的比例并不相等,因此点之间的分界线看起来并不垂直于连接点的线。


相关问题