pyplot.scatter 中的随机颜色基于值

Random colors in pyplot.scatter based on value

我有一个大型 pandas 数据框,我对其进行了聚类,并且聚类 ID 存储在数据框的一列中。 我想以每个集群都有不同颜色的方式显示集群。 我试着用颜色图来做这个,但问题是我有太多的点和簇,所以附近的簇只能分配略有不同的颜色,所以当我绘制所有它们时,我只会得到一个看起来像这样的大混搭:

请注意,此图像包含大约 4000 个簇,但由于簇的颜色只是从上到下分配的,所以附近的簇混合在一起。

我希望附近的簇被涂成不同的颜色,所以我尝试为每个簇随机分配颜色,然后根据其簇标签为每个点分配颜色,如下所示:

# creating a color for each distinct cluster label
colors = [(random.random(), random.random(), random.random())
          for _ in range(len(set(data['labels'])))]
# assigning color to a point based on its cluster label
for index, row in data.iterrows():
    plt.scatter(row['x'], row['y'], color=colors[int(row['labels'])])

现在这个程序可以运行了,但是比上面的矢量化版本慢很多

有没有办法在不编写 for 循环的情况下用明显不同的颜色为每个簇着色?

这会创建一个包含 256 种颜色的随机颜色图,然后您可以将其传递给散点图:

def segmentation_cmap():
    vals = np.linspace(0, 1, 256)
    np.random.shuffle(vals)
    return plt.cm.colors.ListedColormap(plt.cm.CMRmap(vals))


ax.scatter(row['x'],row['y'],c=row['labels'],s=1,cmap=segmentation_cmap())

您可以添加颜色,但无论如何您在某些时候都很难看出差异!