gpt4 book ai didi

python - 散点图,其中每个点颜色是 K 种颜色的不同混合

转载 作者:行者123 更新时间:2023-11-30 09:00:29 24 4
gpt4 key购买 nike

我有 2D 数据,我想将其聚类成 K 个簇。让我们假设K=4。运行聚类算法后,每个点都有一个 4 长度的概率向量(其条目加起来为 1),表示该点属于每个聚类的概率。

我的想法是为每个簇分配一种颜色,然后制作一个散点图,其中每个点根据其概率向量被着色为所有颜色的混合。如果 K=3 ,颜色可能是 RGB,因此我可以使用像 this question 中所说的 ax.scatter(x1, x2, facecolors=probability_vectors) 之类的东西。我使用该解决方案在具有 K=2 的图像中绘制图(将所有向量中的蓝色列固定为 0)。我仍然可以将它用于 K=3,但对于 K=4 我需要一些不同的东西。有什么建议吗? 2D scatter plot with probabilites

编辑:

使用 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)] enter image description here

我现在的问题是,如果我有一个点的概率向量为[0.5, 0.0, 0.0, 0.0, 0.5],即一半为黄色簇,一半为红色簇,其颜色应为橙色。但是,如果我执行 0.5*0.2 + 0.5*1.0 ,我会得到蓝色的 0.6 。我应该如何计算平均值才能得到橙色而不是蓝色?

编辑2:

明白了,我只需对每个簇质心的 RGB 版本进行平均(而不是 HUE)

:D enter image description here

最佳答案

您正在寻找 HSB 色彩空间。

HSB 中的颜色由 3 个值组成:

  • H = HUE - 实际颜色
  • S = 饱和度 - 有多少颜色(越少越多)颜色看起来像灰度)
  • B = 亮度

您可以轻松地从该空间生成 N 个最不同的颜色,然后转换为 RGB

import colorsys
N = 5
HSV = [(x*1.0/N, 0.5, 0.5) for x in range(N)]
RGB = map(lambda x: colorsys.hsv_to_rgb(*x), HSV)

为了混合HSB颜色来绘制点,可以对相应的RGB颜色进行加权平均,权重等于概率向量。

关于python - 散点图,其中每个点颜色是 K 种颜色的不同混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41314736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com