Python中的颜色处理
在我的聚类图形界面中,我现在使用随机颜色来表示不同的聚类,因为我事先不知道会有多少个聚类。
在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)
请注意,这样做会让随机数变得不那么随机。如果这对你来说是个问题,比如你的应用程序在其他地方也使用随机数,那么你可能需要考虑其他答案中提到的缓存选项。