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()
|