pyplot.scatter
ermöglicht die Übergabe an c=
ein Array, das Gruppen entspricht, die dann die Punkte basierend auf diesen Gruppen färben wird. Dies scheint jedoch das Erzeugen einer Legende nicht zu unterstützen, ohne jede Gruppe separat einzeln zu zeichnen.Streudiagramm mit Legende farbig nach Gruppe ohne mehrere Aufrufe von plt.scatter
So zum Beispiel farbigen ein Streudiagramm mit Gruppen durch Iterieren über die Gruppen und Plotten jeweils separat erzeugt werden:
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()
Welche erzeugt:
ich erreichen kann, ein ähnlich aussehendes Diagramm, ohne jedoch über jede Gruppe zu iterieren:
f, ax = plt.subplots(1)
ax.scatter(feats[:, 0], feats[:, 1], c=np.array(['C0', 'C1', 'C2'])[target])
Aber ich kann keinen Weg finden, eine entsprechende Legende mit dieser zweiten Strategie zu erzeugen. Alle Beispiele, auf die ich gestoßen bin, durchlaufen die Gruppen, was ... weniger als ideal erscheint. Ich weiß, dass ich eine Legende manuell erzeugen kann, aber das scheint wieder übermäßig umständlich.
Ich bin mir bewusst, dass Sie dies in Seaborn einfach tun können, aber mein tatsächlicher Anwendungsfall (wo ich 3D-Punktdiagramme plotten) Seaborn wird nicht unterstützt. unter der Motorhaube benutzt Seaborn Matplotlib, um das Plotten durchzuführen - ich nehme an, ich könnte durchgehen und sehen, wie Seaborn die Streudiagramme und die zugehörigen Figurenlegenden im Paarplot (oder Regplot) generiert. Meine Vermutung ist, dass es sich wie in meinem ersten Beispielcode um die Gruppen dreht. – user3014097