共计 1136 个字符,预计需要花费 3 分钟才能阅读完成。
import scipy.spatial as spt
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='simhei', size=10) # 设置中文显示,字体大小
plt.rc('axes', unicode_minus=False) # 该参数解决负号显示的问题
points = np.random.randint(1,20,(10,2)) # 生成 10 个二维坐标点,x 和 y 的取值范畴为 [1,20)
plt.scatter(x=points[:, 0], y=points[:, 1], s=150 ,color='red', marker='o') # 标出所有样本点 s 代表 marker 的大小 留神前两个参数,不是坐标点,而是 x 坐标的汇合(二维矩阵 points 的第一列)和 y 坐标的汇合(二维矩阵 points 的第二列)# 执行查找函数
tree = spt.cKDTree(data=points)
for point in points:
distances, indexs = tree.query(point, k=2) # 对每个坐标点,求出与它间隔最近的两个点(最近邻是它自身,要疏忽掉)# point 代表以后点,point[0] 即为以后点的 x 坐标,point[1] 即为以后点的 y 坐标
# points[indexs[1]] 代表其余点中距离以后点最近的一个点,points[indexs[1]][0] 和 points[indexs[1]][1] 代表这个点的 x 和 y 坐标
x = [point[0], points[indexs[1]][0]]
y = [point[1], points[indexs[1]][1]]
# plt.plot(x,y, color='black') # 不带箭头的连线。留神前两个参数,不是坐标点,而是 x 坐标的汇合和 y 坐标的汇合
plt.arrow(x= point[0],y= point[1], dx=points[indexs[1]][0]-point[0], dy=points[indexs[1]][1]-point[1] ,width=0.1 ,length_includes_head=True, color='green') # 带箭头的连线:https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.arrow.html
plt.text(sum(x)/2, sum(y)/2,fontsize=10, s="%.2f"%distances[1]) # 在连线上表明最短距离的值。因为 x 是两个点 x 坐标的汇合,所以 sum(x)/ 2 代表这条线的核心地位,在两头写(s 示意要书写的字符串)plt.show() # 展现图像
正文完