我有二维数据,我想聚类成K个簇。让我们假设K=4
。在运行聚类算法之后,每个点都有一个4长度的概率向量(其条目加起来为1),表示该点属于每个聚类的概率。在
我的想法是给每个簇指定一个颜色,然后绘制一个散点图,其中每个点根据其概率向量作为所有颜色的混合着色。如果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
,它是蓝色的。我应该如何计算平均值才能得到橙色而不是蓝色?在
明白了,我只需要平均每个星团质心的RGB版本(而不是色调)
您正在寻找HSB颜色空间。
HSB中的颜色由3个值组成:
你可以从这个空间很容易地生成N个最不同的颜色,然后转换成RGB
对于混合用于绘制点的HSB颜色,可以对相应的RGB颜色进行加权平均,权重等于概率向量。
您可以使用matplotlib colors文档的Colormap section中提到的RGBA方案。A代表阿尔法。同时阅读ScalarMappable section。
根据问题中引用的答案修改:
相关问题 更多 >
编程相关推荐