2015-01-31 26 views
1

我可以绘制kmeans簇的所有数据点,以便使用不同的颜色表示簇。但是现在我想要将群集的中心绘制成与群集点相同的颜色。 这里是我的代码:绘制k-means簇的中心与其簇点的颜色相同

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

label_color是阵列经由col_mapdata2D其群集色的每个数据点进行匹配。您需要一个数组,将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) 

以这种方式,您不必为您的点使用颜色映射数组。