我能够绘制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]]
答案 0 :(得分:1)
label_color
是一个数组,通过data2D
将col_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)
通过这种方式,您不必为您的积分使用颜色贴图阵列。