首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matplotlib中生成随机颜色?

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

Stack Overflow用户
提问于 2013-02-06 01:55:29
回答 12查看 190.4K关注 0票数 115

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

我叫分散在一个循环中,希望每个情节都有不同的颜色。

代码语言:javascript
复制
for X,Y in data:
   scatter(X, Y, c=??)

一种颜色。C可以是单个颜色格式字符串,也可以是长度为N的颜色规格序列,也可以是使用通过kwargs指定的cmap和范数映射到颜色的N个数字序列(见下文)。请注意,c不应该是单个数字RGB或RGBA序列,因为这与要重叠的值数组是无法区分的。C可以是一个二维数组,其中行是RGB或RGBA .

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2014-09-02 16:45:29

我叫分散在一个循环中,希望每个情节都有不同的颜色。

基于此,并根据您的回答:在我看来,您实际上希望您的数据集具有n不同的颜色;您希望将整数索引映射到不同的RGB颜色。类似于:

下面是实现该功能的功能:

代码语言:javascript
复制
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)

问题中的伪代码片段中的用法:

代码语言:javascript
复制
cmap = get_cmap(len(data))
for i, (X, Y) in enumerate(data):
   scatter(X, Y, c=cmap(i))

我用以下代码在我的回答中生成了这个数字:

代码语言:javascript
复制
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进行测试。它如预期的那样工作。

票数 179
EN

Stack Overflow用户

发布于 2013-02-06 02:07:50

代码语言:javascript
复制
for X,Y in data:
   scatter(X, Y, c=numpy.random.rand(3,))
票数 97
EN

Stack Overflow用户

发布于 2015-01-29 19:25:00

详细说明@john-mee的答案,如果您有任意长的数据,但不需要严格的唯一颜色:

对于python 2:

代码语言:javascript
复制
from itertools import cycle
cycol = cycle('bgrcmk')

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

对于python 3:

代码语言:javascript
复制
from itertools import cycle
cycol = cycle('bgrcmk')

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

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

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14720331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档