散点图通过颜色matplotlib python分离集群

Posted

技术标签:

【中文标题】散点图通过颜色matplotlib python分离集群【英文标题】:Scatter plot segregate clusters by color matplotlib python 【发布时间】:2013-11-19 22:11:01 【问题描述】:

我正在研究一种聚类算法,并且需要将散点图中属于同一聚类的所有点标记为相同的颜色。我有一个列表,它指示每个点属于哪个集群,用整数 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 库的海洋中,非常感谢任何帮助。

提前致谢!

【问题讨论】:

【参考方案1】:

颜色参数见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() ) 

【讨论】:

如果您有很多集群,您可能还想考虑使用标记参数以便更容易区分。【参考方案2】:

如果你使用 numpy 数组,你可以简化切片 如果你传递给color param clusters label 它应该可以正常工作:

plt.scatter(item[:, 0], item[:, 1], color=clusters)
plt.scatter(centroids_list[:, 0], centroids_list[:, 1], s=70, c='r')

您可以使用meshgridplt.imshow 一起添加创辉背景,例如here

【讨论】:

【参考方案3】:

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

我发现 scatter 有时表现得很奇怪(至少在 ipython 笔记本中),但 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 += 1

【讨论】:

以上是关于散点图通过颜色matplotlib python分离集群的主要内容,如果未能解决你的问题,请参考以下文章

Python实现彩色散点图绘制(利用色带对散点图进行颜色渲染)

matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色

python数据可视化--matplotlib绘制散点图

python使用matplotlib可视化散点图(scatter plot)根据matplotlib中数据点的值更改数据点的颜色数值更大的点颜色更深

matplotlib-直方图、箱体图、散点图

用matplotlib画散点图