gpt4 book ai didi

python - 如何使用 Python 在一组点上绘制多边形(部分向内弯曲)边缘?

转载 作者:行者123 更新时间:2023-11-28 17:59:01 27 4
gpt4 key购买 nike

我正在尝试在如下所示的 K-Means 集群上绘制多边形(凹面)边(图 1)。

enter image description here

在@ypnos 的帮助下,这段代码绘制了除边缘之外的所有内容。

df = pd.read_csv('https://raw.githubusercontent.com/MachineIntellect/dataset.ml/master/watermelon/watermelon_4_0.csv')
X = df.iloc[:,1:].to_numpy()
m0 = X[5]
m1 = X[11]
m2 = X[23]
centroids = np.array([m0, m1, m2])
labels = pairwise_distances_argmin(X, centroids)
m0 = X[labels == 0].mean(0)
m1 = X[labels == 1].mean(0)
m2 = X[labels == 2].mean(0)
new_centroids = np.array([m0, m1, m2])
plt.xlim(0.1,0.9)
plt.ylim(0, 0.8)
plt.scatter(X[:,0], X[:,1])
plt.scatter(new_centroids[:,0], new_centroids[:,1], c='r', marker = '+')
for i in range(3):
points = X[labels == i]
hull = ConvexHull(points)
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'r-')

enter image description here(图 2)

The scikit-learn doc似乎很鼓舞人心

问题是fig_1中箭头指向的边与fig_2中对应的不一样。

箭头指向的多边形边缘向内弯曲(感谢@dwilli)。

感谢@ImportanceOfBeingErnest 的提醒,scipy.spatial.ConvexHull 可能无法产生凹面。

有没有其他模块/包可以做到这一点(凹)?

如有任何提示,我们将不胜感激。

最佳答案

你的灵感展示的是维诺图。对于图中的任何坐标,颜色显示它将关联到哪个集群。

您在第一个图中显示的多边形是集群成员凸包的粗略近似值。您可以使用 scipy.spatial.ConvexHullcv2.convexHull()(来自 OpenCV)来计算它。前者的文档还给出了 example on how to plot it .

关于python - 如何使用 Python 在一组点上绘制多边形(部分向内弯曲)边缘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com