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.