生成【颜色不相近】的一组随机颜色的 Python 实现
如何使用 Python 生成一组不相邻的随机颜色,并使用 Matplotlib 将它们可视化。
首先,定义一个函数 generate_random_color
,该函数生成一个带有足够颜色通道差异的随机RGB颜色,确保与之前生成的颜色不相邻。
import random
import math
import matplotlib.pyplot as plt
def generate_random_color(min_distance=0.2, previous_colors=None, max_attempts=100):
"""生成一个带有足够颜色通道差异的随机RGB颜色,确保与之前生成的颜色不相邻。"""
def color_distance(color1, color2):
"""计算两个颜色之间的欧氏距离。"""
return math.sqrt(sum((c1 - c2) ** 2 for c1, c2 in zip(color1, color2)))
if previous_colors is None:
previous_colors = []
if not previous_colors:
return (random.random(), random.random(), random.random())
for _ in range(max_attempts):
r = random.random()
g = random.random()
b = random.random()
min_distance_to_previous = min(color_distance(new_color, prev_color) for new_color in ((r, g, b),) for prev_color in previous_colors)
if min_distance_to_previous >= min_distance:
return (r, g, b)
return None
接下来,使用这个函数生成了一组不相近的随机颜色,并通过 Matplotlib 将它们可视化。
# 示例用法
previous_colors = []
for _ in range(10):
color = generate_random_color(min_distance=0.3, previous_colors=previous_colors)
previous_colors.append(color)
# 显示生成的颜色
fig, ax = plt.subplots()
for i, color in enumerate(previous_colors):
ax.scatter([i], [0], c=[color], s=100, label=f"Color {i+1}")
ax.legend()
plt.show()
在上述示例中,生成了10个不相邻的随机颜色,并通过 Matplotlib 将它们以散点图的形式展示出来。每个颜色点都使用不同的标签进行区分。
希望这个示例对你有帮助!