matplotlib 依赖于聚类成员关系的色图散点图

dgenwo3n  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(110)

我正在进行软聚类的数据集,我想创建一个很酷的图形,看起来类似的图像张贴。我想显示一个数据点之间的成员关系两个(或更多的集群)的图形形式。我不是很清楚如何去做这一点,但是。我用标准来分配颜色的数据点,但不知道如何创建一个更动态排序的图形如下所示。任何帮助感激。

qnzebej0

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])

waxmsbnn

waxmsbnn2#

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()

相关问题