Метод для генерации 'N' случайных цветов 'P' раз, используя get_cmap (). Colors. Ошибка: объект 'LinearSegmentedColormap' не имеет атрибута 'colors'. Matplotlib - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь сгенерировать N случайных цветов P раз. Например, у меня есть 10 разных графиков с 20 барами в каждом, и я хочу назначить каждому бару свой цвет. Как я могу сгенерировать 20 случайных цветов для каждой полосы 10 раз?

Я написал этот код, но он показывает ошибки.

def generate_n_random_cmap(how_many=20,list_len=10):
    '''
    Generate list of 20 colors 10 times by default. 
    NOTE: Colors can be duplicated if lit_len is greater than length of plt.colormap()
    '''
    import random
    import matplotlib.pyplot as plt
    c_list = []
    while len(c_list)!=list_len:
        try:
            c_list.append(plt.cm.get_cmap(random.choice(plt.colormaps()),how_many).colors)
        except :
            None
    return random.shuffle(c_list)

И ошибка, которую я получаю:

'LinearSegmentedColormap' object has no attribute 'colors'

Есть ли другой способ? Цвета должны быть случайными по своей природе.

1 Ответ

1 голос
/ 02 апреля 2020

Есть несколько вещей. Как говорится в сообщении об ошибке, объект, который вы получаете, не имеет атрибута color. Как говорится в руководстве , Make a linear segmented colormap with name from a sequence of colors which evenly transitions from colors[0] at val=0 to colors[-1] at val=1.

Во-вторых, вы получаете список палитр. Один из способов сделать то, что вы хотите, - это для каждого графика случайным образом выбрать how_many цветов, которые вы хотите, и затем построить соответствующие графики, например ::

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.colors as mcolors

how_many = 20 
# Create a list of colours randomly selected from the list of matplotlib colours
c_list = [np.random.choice(list(mcolors.CSS4_COLORS.values())) for i in range(how_many)] 
barlist=plt.bar(np.arange(len(c_list)), np.arange(len(c_list))) 
for i in range(len(c_list)):
    barlist[i].set_color(c_list[i])

Method one

Другая вещь, которую вы могли бы сделать, это генерировать разные палитры, например. используя seaborn или даже matplotlib, вы можете использовать произвольный выбор палитры np.random.choice(plt.colormaps()). Соответствующую информацию можно найти в руководстве по seaborn или в таких сообщениях: Как задать пользовательские цвета для столбчатой ​​диаграммы pandas / matplotlib , { ссылка }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...