生成 n 个尽量有明显区别的颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import colorsys

def generate_colors(n):
"""
生成 n 个尽量有明显区别的颜色。

参数:
n (int):要生成的颜色数量,必须是正整数。

返回:
list:包含 n 个 RGB 颜色值的列表,每个颜色值是一个三元组 (r, g, b)。
"""
colors = []
cnt = 0
k = (n + 9) // 10
for i in range(k):
for j in range(10):
h = (360 / 10) * j + 23 * i
s = 1.0 if cnt < 25 else 0.8
l = 0.3 + (j * 19) % 7 / 7 * 0.4
cnt += 1
r, g, b = colorsys.hls_to_rgb(h / 360, l, s)
colors.append((int(r * 255), int(g * 255), int(b * 255)))
if cnt == n:
break
return colors

import matplotlib.pyplot as plt
import numpy as np

colors = generate_colors(30)

fig, ax = plt.subplots(figsize=(6, 6))
for i, color in enumerate(colors):
rect = plt.Rectangle((0, -i), 1, 1, color=np.array(color) / 255)
ax.add_patch(rect)
ax.set_xlim(0, 1)
ax.set_ylim(-len(colors), 0)
ax.axis('off')
plt.show()