我想在纹理中绘制一些数据:连续多个项目.它们不是按顺序创建的,它们可能都是不同的大小(想想内存堆).每个数据项都是一个小矩形,我希望能够区分它们,所以我希望它们中的每一个都有一个独特的颜色.
现在我可以使用rand()生成RGB值并希望它们都不同,但我怀疑我不会在RGB空间中获得良好的分布.有比这更好的方法吗?例如,在它们(几乎)重复之前循环使用不同颜色的好方法是什么?
颜色不必与项目中的任何数据匹配.我只是希望能够看到许多值,并看到它们是不同的,因为它们是相邻的.
我可以解决一些问题,但我认为这是一个有趣的问题.:)
我有一个数值列表.如果需要,我可以将值标准化.
我需要将此列表转换为颜色列表(在HSL,RGB或任何其他颜色模型中 - 我以后总是可以进行转换).
对于任何给定值,每次颜色必须相同.
两个给定的数值越不同,对应的对应值应该越多.
所有使用的颜色必须尽可能相互对比(这是一个软限制,粗略的解决方案会做).
请注意,列表相当大(数千个数字),因此简单地将所有数字压缩到单个颜色通道中会产生过于密集的结果.
我看过这个,但对随机部分没有帮助。有没有更好的方法来随机生成 3 种不同的颜色,以便在下面的代码中使正方形、圆形和文本在视觉上相互突出。颜色必须是随机生成的,并且彼此之间必须足够不同。当前的代码可能只有一半的时间有效
plot(0, type = "n", xlim = c(0,10), ylim = c(0,10),
ann = FALSE, axes = FALSE, asp = 1)
cols = colorRampPalette(sample(2:9,2), alpha = TRUE)(8)
polygon(x = c(1,9,9,1), y = c(1,1,9,9), border = NA, col = cols[1])
symbols(x = 5, y = 5, circles = 4, inches = FALSE,
add = TRUE, bg = cols[4], fg = NA)
text(x = 5, y = 5, labels = "Hi", col = cols[7], font = 2, cex = …Run Code Online (Sandbox Code Playgroud) 我想在屏幕上绘制一些项目,每个项目都在N套中.集合的数量一直在变化,因此我需要计算尽可能不同的N种不同的颜色(以便于识别哪个集合中的内容).
因此,例如,当N = 2时,我的结果将是黑色和白色.有三个我猜我会全红,全绿,全蓝.对于所有四个人来说,正确的答案是不太明显的,这就是我遇到麻烦的地方.
编辑::显而易见的方法是将0映射到红色,将1映射到绿色,将其间的所有颜色映射到适当的彩虹颜色,然后通过GetRainbowColour(N/TotalSets)获得集合N的颜色,因此GetRainbowColour方法就是解决这个问题所需要的
我找到了生成 n 种不同颜色的代码。我拿了代码并用它做了一门课
import colorsys
import itertools
from fractions import Fraction
class DistinctColorsGenerator:
def __init__(self):
self._bias = lambda x: (math.sqrt(x / 3) / Fraction(2, 3) + Fraction(1, 3)) / Fraction(6, 5)
self._gen_rgb = lambda x : colorsys.hsv_to_rgb(*x)
self._flatten = itertools.chain.from_iterable
self._hsvs = lambda: self._flatten(map(self._hsv, self._fracs()))
self._rgbs = lambda: map(self._gen_rgb, self._hsvs())
self._gen_colors = lambda: map(self._gen_color, self._rgbs())
def generate(self, number):
return list(itertools.islice(self._gen_colors(), number))
def _zenos_dichotomy(self):
for k in itertools.count():
yield Fraction(1, 2 ** k)
def _fracs(self):
yield 0
for k …Run Code Online (Sandbox Code Playgroud)