Спасибо, что включили пример данных!
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()
Результат:
Если вы хотите остаться с ванильным 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)