我正在使用颜色字典,但 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))
对于上下文,我正在使用一个使用 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))