ValueError: Неверный аргумент RGBA: 'rgbkymc'

train_class = train_df['Class'].value_counts().sortlevel()
my_colors = 'rgbkymc'  #red, green, blue, black, etc.
train_class.plot(kind='bar', color=my_colors)
plt.grid()
plt.show()

Ошибка получения значения: неверный аргумент RGBA: 'rgbkymc'

не знаю почему, так как я проверил, все в порядке. Может ли кто-нибудь помочь мне определить ошибку?

KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\matplotlib\colors.py in to_rgba(c, alpha)
131     try:
--> 132         rgba = _colors_full_map.cache[c, alpha]
133     except (KeyError, TypeError):  # Not in cache, or unhashable.

KeyError: ('rgbkymc', None)

3 ответа

Решение

color Аргумент принимает только одно допустимое значение цвета, поэтому 'r' или же 'k'или последовательность таких значений цвета ( документация дляbar() называет это массивом, как). Список имен будет работать:

my_colors = ['r', 'g', 'b', 'k', 'y', 'm', 'c']  # red, green, blue, black, etc.

В документации говорится, что последовательность должна быть равна длине нанесенных столбцов:

Необязательные аргументы color, edgecolor, linewidth, xerr и yerr могут быть либо скалярами, либо последовательностями длины, равными количеству баров.

Вы также можете рассмотреть цветовые карты как удобный и быстрый путь к определенным цветам полос; вы не можете передать их напрямую, но вы можете создать свою серию цветов из цветовой карты после импорта:

import matplotlib.pyplot as plt

paired_colors = plt.cm.Paired(range(len(train_class)))

train_class.plot(kind='bar', color=paired_colors)

Для гистограмм я бы выбрал качественную цветовую карту; каждое имя является атрибутом plt.cm модуль.

Вопрос требует небольшого изменения, так как сначала возникнет следующая ошибка:

AttributeError: 'Series' object has no attribute 'sortlevel'

Это связано с тем, что sortlevel устарел с версии 0.20.0. Вместо этого вы должны использовать sort_index.

Плюс буквы, обозначающие цвета в color параметр plotКоманда должна быть представлена ​​в виде списка, а не в строке. Вы можете узнать больше об этом в разделе " Указание цветов" в matplotlib.

Следовательно, вы можете использовать этот код:

train_class = train_df['Class'].value_counts().sort_index()
my_colors = ['r', 'g', 'b', 'k', 'y', 'm', 'c']  #red, green, blue, black, 'yellow', 'magenta' & 'cyan'
train_class.plot(kind = 'bar', color = my_colors)
plt.grid()
plt.show()

Спасибо!

      my_colors = ['r', 'g', 'b', 'k', 'y', 'm', 'c']  #red, green, blue, black, 'yellow', 'magenta' & 'cyan'
train_class_distribution.plot(kind='bar',color=my_colors)
Другие вопросы по тегам