Изменить цвета на графике рассеяния по категориям - PullRequest
2 голосов
/ 01 мая 2020

Мне интересно, как я могу вручную изменить цвета моих категорий в коде python вместо использования cmap?

Нужные цвета - это следующие шестнадцатеричные цветовые коды:

Синий: # 1f77b4

Оранжевый: # ff7f0e

Зеленый: # 2ca02 c

Красный: # d62728

d = """category1,05-01-2020
category1,02-02-2020
category3,06-03-2020
category2,12-04-2020
category4,07-05-2020

"""
df = pd.read_csv(StringIO(d), sep=',', parse_dates=[1], header=None, names=['category','date'])


fig, ax = plt.subplots()
ax.scatter(df['date'],df['category'], marker='s', c=df['category'].astype('category').cat.codes, cmap='tab10')

Помощь приветствуется!

1 Ответ

0 голосов
/ 01 мая 2020

Спасибо, что включили пример данных!
Seaborn имеет hue и palette ключевые аргументы, которые делают это довольно простым.

import seaborn as sns

df = df.sort_values('category')
sns.scatterplot('date','category',marker='s',data=df,
                hue='category',palette=['#1f77b4','#ff7f0e','#2ca02c','#d62728'])
plt.gcf().autofmt_xdate()
plt.show()

Результат:
enter image description here


Если вы хотите остаться с ванильным Matplotlib, вы можете сделать:

from matplotlib.colors import LinearSegmentedColormap

cmap = LinearSegmentedColormap.from_list('custom_colors',
                                         ['#1f77b4','#ff7f0e','#2ca02c','#d62728'])

fig, ax = plt.subplots() 
ax.scatter(df['date'],df['category'], marker='s', 
           c=df['category'].astype('category').cat.codes, cmap=cmap)
...