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())
您可以添加颜色,但无论如何您在某些时候都很难看出差异!
我有一个大型 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())
您可以添加颜色,但无论如何您在某些时候都很难看出差异!