pyplot.scatter
permet de passer à c=
un tableau qui correspond à des groupes, qui colorera alors les points basés sur ces groupes. Cependant, cela ne semble pas soutenir la génération d'une légende sans spécifiquement traçage de chaque groupe séparément.nuage de points avec légende colorée par groupe sans appels multiples à plt.scatter
Ainsi, par exemple, un diagramme de dispersion avec des groupes de couleur peuvent être générés par itérer sur les groupes et tracer chacun séparément:
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()
qui génère:
je peux obtenir une parcelle semblable sans itération sur chaque groupe:
f, ax = plt.subplots(1)
ax.scatter(feats[:, 0], feats[:, 1], c=np.array(['C0', 'C1', 'C2'])[target])
Mais je n'arrive pas à trouver un moyen de générer une légende correspondante avec cette seconde stratégie. Tous les exemples que j'ai rencontrés se rapportent aux groupes, ce qui semble ... moins qu'idéal. Je sais que je peux générer manuellement une légende, mais encore une fois cela semble trop lourd.
Je suis conscient que vous pouvez le faire dans seaborn simplement, mais mon cas d'utilisation réelle (où je suis en train de tracer des parcelles de dispersion 3D) seaborn ne supporte pas. sous le capot seaborn utilise matplotlib pour faire le tracé - je suppose que je pourrais passer à travers et voir comment seaborn génère les nuages de points et les légendes de figures associées dans le coupleplot (ou regplot). Je suppose que c'est en boucle sur les groupes comme dans mon premier exemple de code. – user3014097