gráfico de dispersão com legenda colorida por grupo sem várias chamadas para plt.scatter

pyplot.scatter permite passar parac= uma matriz que corresponde a grupos, que colorirá os pontos com base nesses grupos. No entanto, isso parece não suportar a geração de uma legenda sem plotar especificamente cada grupo separadamente.

Assim, por exemplo, um gráfico de dispersão com grupos coloridos pode ser gerado iterando sobre os grupos e plotando cada um separadamente:

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
feats = load_iris()['data']
target = load_iris()['target']

f, ax = plt.subplots(1)
for i in np.unique(target):
    mask = target == i
    plt.scatter(feats[mask, 0], feats[mask, 1], label=i)
ax.legend()

O que gera:

Consigo obter um enredo semelhante sem iterar sobre cada grupo:

f, ax = plt.subplots(1)
ax.scatter(feats[:, 0], feats[:, 1], c=np.array(['C0', 'C1', 'C2'])[target])

Mas não consigo descobrir uma maneira de gerar uma legenda correspondente com esta segunda estratégia. Todos os exemplos que eu encontrei repetem os grupos, o que parece ... menos que o ideal. Eu sei que posso gerar manualmente uma legenda, mas novamente isso parece excessivamente complicado.

questionAnswers(1)

yourAnswerToTheQuestion