matplotlib - 在matplotlib中,如何生成随机颜色?

如何生成传递到绘图函数的随机颜色的简单示例?

我在循环中调用scatter,并希望每个plot以不同的颜色。


for X,Y in data:
 scatter(X, Y, c=??)

时间:


for X,Y in data:
 scatter(X, Y, c=numpy.random.rand(3,1))

我在循环中调用散点图,并希望每个 plot 使用不同的颜色。

基于这一点,并在你的回答中: 在我看来,你真的希望 N 截然不同的数据集颜色;要映射的整数索引0, 1,.. . N-1 to的颜色。像:

mapping index to color

这就是如何用一种通用的方式来完成颜色映射:


import matplotlib.pyplot as plt
import matplotlib.cm as cmx
import matplotlib.colors as colors

def get_cmap(N):
 '''Returns a function that maps each index in 0, 1,.. . N-1 to a distinct 
 RGB color.'''
 color_norm = colors.Normalize(vmin=0, vmax=N-1)
 scalar_map = cmx.ScalarMappable(norm=color_norm, cmap='hsv') 
 def map_index_to_rgb_color(index):
 return scalar_map.to_rgba(index)
 return map_index_to_rgb_color

def main():
 N = 30
 fig=plt.figure()
 ax=fig.add_subplot(111) 
 plt.axis('scaled')
 ax.set_xlim([ 0, N])
 ax.set_ylim([-0.5, 0.5])
 cmap = get_cmap(N)
 for i in range(N):
 col = cmap(i)
 rect = plt.Rectangle((i, -0.5), 1, 1, facecolor=col)
 ax.add_artist(rect)
 ax.set_yticks([])
 plt.show()

if __name__=='__main__':
 main()

当数据集小于9个数据集时:


colors = "bgrcmykw"
color_index = 0

for X,Y in data:
 scatter(X,Y, c=colors[color_index])
 color_index += 1


from itertools import cycle
col_gen = cycle('bgrcmk')

for X,Y in data:
 scatter(X, Y, c=col_gen.next())

它的优点是颜色易于控制,而且很短。

...