我正在使用颜色字典,但 muy 函数可以使用比我更多的功能。 Pandas

I'm working with a dictionary of colors but muy function can use more than I have. Pandas

对于上下文,我正在使用一个使用 i 质心的函数,质心重新组合不同的点,因为我使用的是 k 均值聚类。我定义了一个颜色字典:

   colmap = {1: 'r', 2: 'g', 3: 'b', 4: "y", 5: "k", 6: "m", 7: "orange", 8: "brown", 9: "violet"}

我的问题是每个质心都需要一种颜色,所以如果质心的数量多于颜色,该功能将不起作用。我想知道是否有一个带有 len(i) 的随机颜色字典,所以我不必写一个巨大的字典。代码是这样的:

i = 90
I = range(1, i+1)

centroids = {
i+1: [random.rand()*sqr_size, random.rand()*sqr_size]
for i in I}

def asignation(df, centroids):
  for i in centroids.keys():
    df['distance_from_{}'.format(i)] = (
        np.sqrt(
            (df['coord_x'] - centroids[i][0]) ** 2
            + (df['coord_y'] - centroids[i][1]) ** 2
        )
    )
  centroid_distance_cols = ['distance_from_{}'.format(i) for i in centroids.keys()]
  df['closest'] = df.loc[:, centroid_distance_cols].idxmin(axis=1)
  df['closest'] = df['closest'].map(lambda x: int(x.lstrip('distance_from_')))
  df['color'] = df['closest'].map(lambda x: colmap[x])
  return df

倒数第二行是我的问题colmap[x],因为颜色比我给函数的颜色少。

 output >>     df['color'] = df['closest'].map(lambda x: colmap[x])
                KeyError: 76
 

根本不用字典。使用 HSV 颜色模型计算颜色。将H(色调)分成n份。如果这仍然不够,您还可以更改 S(饱和度)和 V(值)以获得相同色调的更亮或更暗的颜色。

这应该很容易为您提供超过 50 种颜色。下图有 96 个,但恕我直言,其中一些已经变得无法区分(但这可能是我的显示器):

我没有根据下面的代码绘制颜色,但它应该让您了解如何生成颜色:

import colorsys


def getColors(n: int) -> list:
    hues_needed = int(n / 3 + 1)
    HSV_colors = []
    SV_combinations = [(1, 1), (0.5, 1), (1, 0.5)]  # normal, bright, dark
    for s, v in SV_combinations:
        for x in range(hues_needed):
            HSV_colors.append((x / hues_needed, s, v))
    RGB_colors = list(map(lambda color: colorsys.hsv_to_rgb(*color), HSV_colors))
    return RGB_colors


print(getColors(10))