如何生成随机颜色以传递到绘图函数的简单示例是什么?
我叫分散在一个循环中,希望每个情节都有不同的颜色。
for X,Y in data:
scatter(X, Y, c=??)一种颜色。C可以是单个颜色格式字符串,也可以是长度为N的颜色规格序列,也可以是使用通过kwargs指定的cmap和范数映射到颜色的N个数字序列(见下文)。请注意,c不应该是单个数字RGB或RGBA序列,因为这与要重叠的值数组是无法区分的。C可以是一个二维数组,其中行是RGB或RGBA .
发布于 2014-09-02 16:45:29
我叫分散在一个循环中,希望每个情节都有不同的颜色。
基于此,并根据您的回答:在我看来,您实际上希望您的数据集具有n不同的颜色;您希望将整数索引映射到不同的RGB颜色。类似于:

下面是实现该功能的功能:
import matplotlib.pyplot as plt
def get_cmap(n, name='hsv'):
'''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct
RGB color; the keyword argument name must be a standard mpl colormap name.'''
return plt.cm.get_cmap(name, n)问题中的伪代码片段中的用法:
cmap = get_cmap(len(data))
for i, (X, Y) in enumerate(data):
scatter(X, Y, c=cmap(i))我用以下代码在我的回答中生成了这个数字:
import matplotlib.pyplot as plt
def get_cmap(n, name='hsv'):
'''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct
RGB color; the keyword argument name must be a standard mpl colormap name.'''
return plt.cm.get_cmap(name, n)
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):
rect = plt.Rectangle((i, -0.5), 1, 1, facecolor=cmap(i))
ax.add_artist(rect)
ax.set_yticks([])
plt.show()
if __name__=='__main__':
main()使用Python2.7和matplotlib 1.5以及Python3.5和matplotlib 2.0进行测试。它如预期的那样工作。
发布于 2013-02-06 02:07:50
for X,Y in data:
scatter(X, Y, c=numpy.random.rand(3,))发布于 2015-01-29 19:25:00
详细说明@john-mee的答案,如果您有任意长的数据,但不需要严格的唯一颜色:
对于python 2:
from itertools import cycle
cycol = cycle('bgrcmk')
for X,Y in data:
scatter(X, Y, c=cycol.next())对于python 3:
from itertools import cycle
cycol = cycle('bgrcmk')
for X,Y in data:
scatter(X, Y, c=next(cycol))它的优点是颜色易于控制,而且很短。
https://stackoverflow.com/questions/14720331
复制相似问题