Как установить уникальный цвет для индивидуального значения легенды - PullRequest
1 голос
/ 21 января 2020

У меня много легенд на моем гистограмме, и я заметил, что в легенде цвет повторяется, поэтому мне трудно различить guish истинное значение на графике в соответствии с легендами, поэтому я хочу установить уникальный цвет для каждого значения в легенде, и для этого я провел много исследований, некоторые из которых не работают, а некоторые довольно трудно понять, например this , когда я использовал это, я получил ошибку, 'AxesSubplot' object has no attribute 'set_color_cycle' так же существует простой и эффективный способ

Мне не нужен код, который применяет цвет для каждого элемента индивидуально, потому что мой набор данных большой, а здесь мой код для более подробной информации о моем графике

, например

#suppose I have data of few cites and their complaints 
city = ['NEW YORK', 'ASTORIA', 'BRONX', 'BRONX', 'ELMHURST', 'BROOKLYN',
       'NEW YORK', 'BRONX', 'KEW GARDENS', 'BROOKLYN']
complaints = ['Noise - Street/Sidewalk', 'Blocked Driveway', 'Blocked Driveway',
       'Illegal Parking', 'Illegal Parking', 'Illegal Parking',
       'Illegal Parking', 'Blocked Driveway', 'Illegal Parking',
       'Blocked Driveway']
# and from this I have created a stack bar chart
cmpltnt_rela = test2.groupby(['City', 'Complaint Type']).size().unstack().fillna(0).plot(kind='bar', legend = True, stacked=True)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5),ncol=2)
cmpltnt_rela.plot(figsize=(18,14))

и его результат выглядит примерно так, где вы можете заметить цвет элемента легенды enter image description here

1 Ответ

0 голосов
/ 21 января 2020

Вы можете создать список цветов той же длины, что и количество уникальных жалоб. Например gist_ncar. В коде я перетасовал порядок цветов, чтобы уменьшить вероятность того, что похожие цвета будут рядом.

Обратите внимание, что очень трудно иметь более 20 цветов, которые достаточно визуально различаются. Разные люди и разные мониторы могут привести к тому, что трудно различить цвета guish.

Эта и эта статья предлагает больше идей для выбора достаточного количества цветов. В вашем случае может быть интересно закрасить похожие жалобы похожими оттенками.

Поскольку в вашем примере кода недостаточно данных, код ниже генерирует некоторые случайные числа.

import pandas as pd
from matplotlib import pyplot as plt
import random
import matplotlib as mpl

city = ['Londen', 'Paris', 'Rome', 'Brussels', 'Cologne', 'Madrid',
        'Athens', 'Geneva', 'Oslo', 'Barcelona', 'Berlin']
complaints = list('abcdefghijklmnopqrstuv')

N = 100
city_column = random.choices(city, k=N)
complaints_column = random.choices(complaints, k=N)
test2 = pd.DataFrame({'City': city_column, 'Complaint Type': complaints_column})

# take a colormap with many different colors and sample it at regular intervals
cmap = plt.cm.gist_rainbow
norm = mpl.colors.Normalize(vmin=0, vmax=len(complaints) - 1)
colors = [cmap(norm(i)) for i in range(len(complaints))]

# create a stack bar chart
cmpltnt_rela = test2.groupby(['City', 'Complaint Type']).size().unstack().fillna(0).plot(kind='bar',
      legend=True, stacked=True, color=colors)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), ncol=2)
cmpltnt_rela.plot(figsize=(18, 14))
plt.tick_params('x', labelrotation=30)

plt.tight_layout()
plt.show()

example plot

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