将k均值聚类的中心绘制为与其聚类点相同的颜色

时间:2015-01-31 21:46:32

标签: python numpy matplotlib scipy scikit-learn

我能够绘制kmeans簇的所有数据点,使得簇用不同的颜色表示。但是现在我还要将群集的中心绘制为与群集点相同的颜色。 这是我的代码:

num_clusters=5
data2D = pca.transform(X)
centers2D = pca.transform(km.cluster_centers_)
labels=km.labels_
colors=['#000000','#FFFFFF','#FF0000','#00FF00','#0000FF']
col_map=dict(zip(set(labels),colors))
label_color = [col_map[l] for l in labels]
plt.scatter( data2D[:,0], data2D[:,1], c=label_color) # This plots the cluster points.

现在问题出在这里,我如何将聚类中心点绘制成与点相同的颜色?具体来说,我应该为c使用什么?

plt.scatter(centers2D[:,0], centers2D[:,1],  marker='x', s=200, linewidths=2, c=label_color)

使用c = label_color不起作用,因为centers2D是一个坐标列表,如下所示。如何将坐标映射到相同的颜色,我映射到第一个散点图的整数?

print centers2D

[[ 0.03563292 -0.09528218]
 [ 0.05799584  0.01593253]
 [ 0.02265664  0.05109819]
 [ 0.09457535 -0.11127898]
 [-0.16129666  0.00428571]]

1 个答案:

答案 0 :(得分:1)

label_color是一个数组,通过data2Dcol_map中的每个数据点与其群集颜色相匹配。您需要一个数组,将centers2D中的每个数据点与其群集颜色相匹配。例如:

center_colors = [col_map[l] for l in range(num_clusters)]
plt.scatter(centers2D[:,0], centers2D[:,1],  marker='x', s=200, linewidths=2, c=center_colors)

就我个人而言,我认为通过迭代,你所做的事情会变得更加简单明了。例如:

for i in range(num_clusters):
    plt.scatter(data2D[labels==i,0], data2D[labels==i,1], c=colors[i])
    plt.scatter(centers2D[i,0], centers2D[i,1], c=colors[i], marker='x', s=200, linewidths=2)

通过这种方式,您不必为您的积分使用颜色贴图阵列。