Python中的颜色处理

2 投票
5 回答
3809 浏览
提问于 2025-04-16 04:10

在我的聚类图形界面中,我现在使用随机颜色来表示不同的聚类,因为我事先不知道会有多少个聚类。

在Python中,这段代码看起来是这样的:

import random
def randomColor():
    return (random.random(),random.random(),random.random())

但是,当我更新内容时,颜色会发生变化。

所以我希望能有一个函数,它的输入参数是I,比如说:

def nonrandomColor(i):
   ...
   return color

这样的话,对于相同的I,它总是返回相同的颜色,同时还能生成任意多的颜色。

答案不一定要用Python写,我更关心的是这个思路的整体结构。

5 个回答

1

如果你想要一些可以重复使用且不会冲突的颜色,可以试试下面这个函数。它会把数字分成1、10、100,然后用这些数字来作为颜色的RGB部分。

def color(i):
  r = i % 10
  g = (i//10) % 10
  b = (i//100) % 10
  return(r*25, g*25, b*25)

举个例子:

color(1) == (25,0,0)
color(10) == (0,25,0)
color(999) = (225,225,255)
6

一种方法是使用缓存。可以使用一个叫做 defaultdict 的东西:

>>> import random
>>> def randomColor():
...    return (random.random(),random.random(),random.random())
... 
>>> from collections import defaultdict
>>> colors = defaultdict(randomColor)
>>> colors[3]
(0.10726172906719755, 0.97327604757295705, 0.58935794305308264)
>>> colors[1]
(0.48991106537516382, 0.77039712435566876, 0.73707003166893892)
>>> colors[3]
(0.10726172906719755, 0.97327604757295705, 0.58935794305308264)
1

只需将随机生成器的种子设置为索引,这样可能比存储颜色更省钱。

random.seed(i)

请注意,这样做会让随机数变得不那么随机。如果这对你来说是个问题,比如你的应用程序在其他地方也使用随机数,那么你可能需要考虑其他答案中提到的缓存选项。

撰写回答