我有要聚类成K个聚类的2D数据。让我们假设K=4
。运行聚类算法后,每个点有一个4长度的概率向量(其条目合计为1),表示该点属于每个聚类的概率。Scatterplot其中每个点颜色是K个颜色的不同混合物
我的想法是为每个聚类指定一种颜色,然后制作一个散点图,其中每个点根据其概率向量作为所有颜色的混合物着色。如果K=3
它的颜色可能是RGB,因此我可以使用像ax.scatter(x1, x2, facecolors=probability_vectors)
之类的东西,就像它在this question中所说的那样。我使用该解决方案在图像中绘制了具有K=2
(将所有矢量中的蓝色列固定为0)的绘图。我仍然可以将它用于K=3
,但对于K=4
我需要不同的东西。任何建议?
编辑:
使用Tomáš Šíma回答,如果我用这个代码(5群):
import colorsys
from matplotlib import pyplot as plt
import numpy as np
N = 5
HSV = [(float(x)/N, 1, 1) for x in range(1,N+1)]
RGB = map(lambda x: colorsys.hsv_to_rgb(*x), HSV)
print HSV
plt.scatter(range(N),np.repeat(0.5,N),c=RGB,s=200)
我得到这样的输出:
[(0.2, 1, 1), (0.4, 1, 1), (0.6, 1, 1), (0.8, 1, 1), (1.0, 1, 1)]
现在我的问题是,如果我有一个概率向量为[0.5, 0.0, 0.0, 0.0, 0.5]
的点,即黄色群集的一半和红色的一半,它的颜色应该是橙色。但是,如果我做0.5*0.2 + 0.5*1.0
我得到0.6
这是蓝色的。我应该如何计算平均值以获得橙色而不是蓝色?
编辑2:
明白了,我只需要平均每个集群质心(而不是HUE)
你是对混合的颜色,所以我更新了答案。 –