How to generate random colors in matplotlib?

前端 未结 11 2225
长情又很酷
长情又很酷 2020-12-12 16:13

What\'s the trivial example of how to generate random colors for passing to plotting functions?

I\'m calling scatter inside a loop and want each plot a different col

11条回答
  •  旧巷少年郎
    2020-12-12 16:18

    If you want to ensure the colours are distinct - but don't know how many colours are needed. Try something like this. It selects colours from opposite sides of the spectrum and systematically increases granularity.

    import math
    
    def calc(val, max = 16):
        if val < 1:
            return 0
        if val == 1:
            return max
    
        l = math.floor(math.log2(val-1))    #level 
        d = max/2**(l+1)                    #devision
        n = val-2**l                        #node
        return d*(2*n-1)
    
    import matplotlib.pyplot as plt
    
    N = 16
    cmap = cmap = plt.cm.get_cmap('gist_rainbow', N)
    
    fig, axs = plt.subplots(2)
    for ax in axs:
        ax.set_xlim([ 0, N])
        ax.set_ylim([-0.5, 0.5])
        ax.set_yticks([])
    
    for i in range(0,N+1):
        v = int(calc(i, max = N))
        rect0 = plt.Rectangle((i, -0.5), 1, 1, facecolor=cmap(i))
        rect1 = plt.Rectangle((i, -0.5), 1, 1, facecolor=cmap(v))
        axs[0].add_artist(rect0)
        axs[1].add_artist(rect1)
    
    plt.xticks(range(0, N), [int(calc(i, N)) for i in range(0, N)])
    plt.show()
    

    output

    Thanks to @Ali for providing the base implementation.

提交回复
热议问题