2015-01-31 112 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) 

以這種方式,您不必爲您的點使用顏色映射數組。