我正在进行软聚类的数据集,我想创建一个很酷的图形,看起来类似的图像张贴。我想显示一个数据点之间的成员关系两个(或更多的集群)的图形形式。我不是很清楚如何去做这一点,但是。我用标准来分配颜色的数据点,但不知道如何创建一个更动态排序的图形如下所示。任何帮助感激。
qnzebej01#
我认为markers正是您需要的:
x1 = y1 = 1 x2 = y2 = 2 dx = np.random.rand(10) dy = np.random.rand(10) x = np.array([x1 + dx, x2 + dx]).ravel() y = np.array([y1 + dy, y2 + dy]).ravel() threshold = 4 markers = np.array(["o" if xy > threshold else "h" for xy in x + y]) fig, ax = plt.subplots() for marker in np.unique(markers): index = markers == marker ax.scatter(x[index], y[index], marker=marker)
添加一些附加代码来控制颜色和透明度(alpha)
import numpy as np import matplotlib.pyplot as plt x1 = y1 = 1 x2 = y2 = 2 dx = np.random.rand(10) dy = np.random.rand(10) x = np.array([x1 + dx, x2 + dx]).ravel() y = np.array([y1 + dy, y2 + dy]).ravel() threshold = 4 markers = np.array(["o" if xy > threshold else "h" for xy in x + y]) blue_color = "midnightblue" # predefined pink_color = "orchid" colors = [blue_color if marker == "o" else pink_color for marker in markers] alphas = np.array([abs(xy - threshold) for xy in x + y]) alphas = 1 - alphas/np.max(alphas) fig, ax = plt.subplots() for i in range(len(x)): ax.scatter(x[i], y[i], marker=markers[i], color=colors[i], alpha=alphas[i])
waxmsbnn2#
scikit-learn中的GaussianMixture所做的事情与问题所问的很接近。具体而言,predict_proba(X)返回一个数组,其中包含X中每个点属于该成分的概率。在下面的示例中,我们拟合了两个混料成分,因此最后两个图应彼此相反:
scikit-learn
GaussianMixture
predict_proba(X)
X
from sklearn.mixture import GaussianMixture from sklearn.datasets import make_moons import matplotlib.pyplot as plt X, _ = make_moons(noise=0.05) mix = GaussianMixture(n_components=2).fit(X) probs = mix.predict_proba(X) fig, ax = plt.subplots(1, 3, sharey=True) ax[0].scatter(X[:, 0], X[:, 1]) ax[1].scatter(X[:, 0], X[:, 1], c=probs[:, 0]) ax[2].scatter(X[:, 0], X[:, 1], c=probs[:, 1]) plt.show()
2条答案
按热度按时间qnzebej01#
我认为markers正是您需要的:
添加一些附加代码来控制颜色和透明度(alpha)
waxmsbnn2#
scikit-learn
中的GaussianMixture
所做的事情与问题所问的很接近。具体而言,
predict_proba(X)
返回一个数组,其中包含X
中每个点属于该成分的概率。在下面的示例中,我们拟合了两个混料成分,因此最后两个图应彼此相反: