如何在 Python 中制作聚类散点图

How to make a scatter plot for clustering in Python

我正在进行聚类并尝试绘制结果。虚拟数据集是:

数据

import numpy as np

X = np.random.randn(10)
Y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2])    # Labels of cluster 0 to 3

集群中心

 centers = np.random.randn(4, 2)    # 4 centers, each center is a 2D point

问题

我想制作一个散点图来显示 data 中的点,并根据聚类标签为这些点着色。

然后我想将 center 点叠加在同一个散点图上,以另一种形状(例如 'X')和第五种颜色(因为有 4 个簇)。


评论

部分问题已得到解答 here。大纲是

plt.scatter(x, y, c=color)

引用 matplotlib 的文档:

c : color or sequence of color, optional, default [...] Note that c should not be a single numeric RGB or RGBA sequence because that is indistinguishable from an array of values to be colormapped. c can be a 2-D array in which the rows are RGB or RGBA, however.

因此在您的情况下,您需要为每个聚类分配一种颜色,然后根据每个点的聚类分配填充颜色数组。

red = [1, 0, 0]
green = [0, 1, 0]
blue = [0, 0, 1]
colors = [red, red, green, blue, green]

问题的第一部分可以使用 colorbar 并将颜色指定为 Cluster 数组来完成。我已经模糊地理解了你问题的第二部分,但我相信这就是你要找的。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(10)
y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2])    # Labels of cluster 0 to 3
centers = np.random.randn(4, 2) 

fig = plt.figure()
ax = fig.add_subplot(111)
scatter = ax.scatter(x,y,c=Cluster,s=50)
for i,j in centers:
    ax.scatter(i,j,s=50,c='red',marker='+')
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.colorbar(scatter)

fig.show()

这导致:

其中您的 "centres" 已使用 + 标记显示。您可以按照为 x and y

所做的相同方式指定您想要的任何颜色