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

z4bn682m  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(76)

我有以下的pandas框架:

import pandas as pd
pd.DataFrame({'cl': {0: 'A', 1: 'C', 2: 'H', 3: 'M', 4: 'S'},
 'd': {0: 245.059986986012,
  1: 320.49044143557785,
  2: 239.79023081978914,
  3: 263.38325791238833,
  4: 219.53334398353175},
 'p': {0: 10.971011721360075,
  1: 10.970258360366753,
  2: 13.108487516946218,
  3: 12.93241352743668,
  4: 13.346107628161008}})

    cl  d           p
0   A   245.059987  10.971012
1   C   320.490441  10.970258
2   H   239.790231  13.108488
3   M   263.383258  12.932414
4   S   219.533344  13.346108

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

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d

centers2 = np.array(
    centers_dt[['d', 'p']]
)

scatter_x = np.array(centers_dt['d'])
scatter_y = np.array(centers_dt['p'])
group = np.array(centers_dt['cl'])
cdict = {'C': 'red', 'A': 'blue', 'H': 'green', 'M': 'yellow', 'S': 'black'}

fig, ax = plt.subplots()
for g in np.unique(group):
    ix = np.where(group == g)
    ax.scatter(scatter_x[ix], scatter_y[ix], c = cdict[g], label = g, s = 100)
ax.legend()

vor = Voronoi(centers2)
fig = voronoi_plot_2d(vor,plt.gca())

plt.show()
plt.close()


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


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

n3ipq98p

n3ipq98p1#

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


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


相关问题