【问题标题】:plotting the center of a k-means cluster to be the same color as its cluster points将 k-means 聚类的中心绘制为与其聚类点相同的颜色
【发布时间】:2015-03-31 04:01:46
【问题描述】:

我能够绘制 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 不起作用,因为 center2D 是一个坐标列表,如下所示。我如何将坐标映射到与我映射到第一个散点图的整数相同的颜色?

print centers2D

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

【问题讨论】:

    标签: python numpy matplotlib scipy scikit-learn


    【解决方案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)
    

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

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 2017-03-22
      • 2016-05-29
      • 2014-06-04
      • 2020-02-21
      • 2015-06-04
      • 2019-06-22
      • 2018-09-30
      • 2015-04-11
      相关资源
      最近更新 更多