首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >散点图按颜色matplotlib python分隔聚类

散点图按颜色matplotlib python分隔聚类
EN

Stack Overflow用户
提问于 2013-11-08 09:19:22
回答 3查看 9.7K关注 0票数 2

我正在研究一种聚类算法,需要将属于同一聚类的散点图中的所有点标记为相同的颜色。我有一个列表,它为每个点指示该点属于哪个集群,并用整数0...k标记,其中k是集群的数量。我想知道如何将这个列表映射到颜色(最好是与聚类算法中预先知道的聚类数量一样多的颜色)。我正在使用python中的matplotlib,完全不知道如何解决这个问题。

代码语言:javascript
运行
复制
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库的海洋中,真的很感谢任何人的帮助。

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-08 10:07:59

请参见pyplot.scatter documentation中的颜色参数。

基本上,您需要将数据分成多个集群,然后在循环中调用pyplot.scatter,每个集群都有一个不同的项作为颜色参数。

您可以使用scipy.cluster中的vq将数据分配给使用质心的集群,如下所示:

代码语言:javascript
运行
复制
    assignments = vq( dataset, centroids_list )[0]
    clusters = [[] for i in range( len( assignments ) )
    for item, clustNum in zip( dataset, assignments ):
        clusters[clustNum].append( item )

如果我没记错的话,至少我以前是这么做的。从那里开始,只需定义一个函数来返回随机颜色,然后:

代码语言:javascript
运行
复制
    for cluster in clusters:
        plt.scatter([item[0] for item in cluster],[item[1] for item in cluster],color=randomColor() ) 
票数 1
EN

Stack Overflow用户

发布于 2015-12-19 00:04:26

如果你使用numpy数组,你可以简化切片,如果你把它传递给color param clusters标签,它应该工作得很好:

代码语言:javascript
运行
复制
plt.scatter(item[:, 0], item[:, 1], color=clusters)
plt.scatter(centroids_list[:, 0], centroids_list[:, 1], s=70, c='r')

还可以像examle here中那样,结合使用meshgridplt.imshow来添加彩色背景

票数 1
EN

Stack Overflow用户

发布于 2013-11-08 16:55:25

如果您有numpy数组,您应该能够使用dataset[:,0]更高效地访问第一列。

我发现scatter有时行为怪异(至少在ipython notebook中是这样),但plot函数也可以做到这一点。

代码语言:javascript
运行
复制
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 += 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19849932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档