Глупый способ построения точечной диаграммы
Предположим, у меня есть данные с 3 классами, следующий код может дать мне идеальный график с правильной легендой, в которой я строю класс данных по классам.
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_blobs
import numpy as np
X, y = make_blobs()
X0 = X[y==0]
X1 = X[y==1]
X2 = X[y==2]
ax = plt.subplot(1,1,1)
ax.scatter(X0[:,0],X0[:,1], lw=0, s=40)
ax.scatter(X1[:,0],X1[:,1], lw=0, s=40)
ax.scatter(X2[:,0],X2[:,1], lw=0, s=40)
ax.legend(['0','1','2'])

Лучший способ построения точечной диаграммы
Однако, если у меня есть набор данных с 3000 классами, вышеуказанный методбольше не работает(Вы не ожидаете, что я напишу 3000 строк, соответствующих каждому классу, верно?) Поэтому я придумываю следующий код для черчения.
num_classes = len(set(y))
palette = np.array(sns.color_palette("hls", num_classes))
ax = plt.subplot(1,1,1)
ax.scatter(X[:,0], X[:,1], lw=0, s=40, c=palette[y.astype(np.int)])
ax.legend(['0','1','2'])

Этот код идеален, мы можем построить все классы только одной строкой.Однако в этот раз легенда отображается неправильно.
Вопрос
Как сохранить правильную легенду при построении графиков с помощью следующего?
ax.scatter(X[:,0], X[:,1], lw=0, s=40, c=palette[y.astype(np.int)])