我正在研究一种聚类算法,需要将属于同一聚类的散点图中的所有点标记为相同的颜色。我有一个列表,它为每个点指示该点属于哪个集群,并用整数0...k标记,其中k是集群的数量。我想知道如何将这个列表映射到颜色(最好是与聚类算法中预先知道的聚类数量一样多的颜色)。我正在使用python中的matplotlib,完全不知道如何解决这个问题。
plt.scatter([item[0] for item in dataset],[item[1] for item in dataset],color='b')
plt.scatter([item[0] for item in centroids_list],[item[1] for item in centroids_list],color='r)
plt.show()现在,这就是我所拥有的,其中聚类点用蓝色表示,质心用红色表示。我希望将质心保留为红色,并且只更改数据集中的点的颜色,以便同一簇中的点具有相同的颜色。我迷失在matplotlib库的海洋中,真的很感谢任何人的帮助。
提前感谢!
发布于 2013-11-08 10:07:59
请参见pyplot.scatter documentation中的颜色参数。
基本上,您需要将数据分成多个集群,然后在循环中调用pyplot.scatter,每个集群都有一个不同的项作为颜色参数。
您可以使用scipy.cluster中的vq将数据分配给使用质心的集群,如下所示:
assignments = vq( dataset, centroids_list )[0]
clusters = [[] for i in range( len( assignments ) )
for item, clustNum in zip( dataset, assignments ):
clusters[clustNum].append( item )如果我没记错的话,至少我以前是这么做的。从那里开始,只需定义一个函数来返回随机颜色,然后:
for cluster in clusters:
plt.scatter([item[0] for item in cluster],[item[1] for item in cluster],color=randomColor() ) 发布于 2015-12-19 00:04:26
如果你使用numpy数组,你可以简化切片,如果你把它传递给color param clusters标签,它应该工作得很好:
plt.scatter(item[:, 0], item[:, 1], color=clusters)
plt.scatter(centroids_list[:, 0], centroids_list[:, 1], s=70, c='r')还可以像examle here中那样,结合使用meshgrid和plt.imshow来添加彩色背景
发布于 2013-11-08 16:55:25
如果您有numpy数组,您应该能够使用dataset[:,0]更高效地访问第一列。
我发现scatter有时行为怪异(至少在ipython notebook中是这样),但plot函数也可以做到这一点。
i = 0
markers = matplotlib.lines.Line2D.markers.keys()
colors = list("bgrcmyk")
for cluster in clusters:
marker, color = markers[i % len(markers)], colors[i % len(colors)]
plt.plot(cluster[:,0],cluster[:,1],marker+color)
i += 1https://stackoverflow.com/questions/19849932
复制相似问题