Eine Legende festzulegen, die den Farben in pyplot.scatter entspricht

Angenommen, meine Daten sind wie folgt organisiert:

x_values = [6.2, 3.6, 7.3, 3.2, 2.7] y_values = [1.5, 3.2, 5.4, 3.1, 2.8] colours = [1, 1, 0, 1, -1] labels = ["a", "a", "b", "a", "c"] 

Ich möchte damit einen Scatterplot machen:

 axis = plt.gca() axis.scatter(x_values, y_values, c=colours) 

Ich möchte eine Legende mit 3 Kategorien: "a", "b" und "c".

Kann ich die labels , um diese Legende zu machen, da die Kategorien in dieser Liste mit der Reihenfolge der Punkte in der colours übereinstimmen?

Muss ich den scatter Befehl für jede Kategorie separat ausführen?

  • Matplotlib: Änderungsmathematik Schriftgröße
  • Plotten von Zeitreihen mit Seaborn FacetGrid
  • Wie kann ich den Bereich innerhalb einer Kontur in Python mit dem Matplotlib berechnen?
  • Plotten von Zeilen ohne Blockierung der Ausführung
  • Kann Matplotlib-Animation nicht speichern
  • Matplotlib über ein Bild animieren
  • 2 Solutions collect form web for “Eine Legende festzulegen, die den Farben in pyplot.scatter entspricht”

    Wenn du eine Farbkarte verwenden möchtest, kannst du einen Legendeneintrag für jeden einzelnen Eintrag in der Farbliste wie unten gezeigt erstellen. Dieser Ansatz funktioniert gut für jede beliebige Anzahl von Werten. Die Legendengriffe sind die Marker einer plot , so dass sie mit den Streupunkten übereinstimmen.

     import matplotlib.pyplot as plt x_values = [6.2, 3.6, 7.3, 3.2, 2.7] y_values = [1.5, 3.2, 5.4, 3.1, 2.8] colors = [1, 1, 0, 1, -1] labels = ["a", "a", "b", "a", "c"] clset = set(zip(colors, labels)) ax = plt.gca() sc = ax.scatter(x_values, y_values, c=colors, cmap="brg") handles = [plt.plot([],color=sc.get_cmap()(sc.norm(c)),ls="", marker="o")[0] for c,l in clset ] labels = [l for c,l in clset] ax.legend(handles, labels) plt.show() 

    Bildbeschreibung hier eingeben

    Sie können immer Ihre eigene Legende wie folgt machen:

     import matplotlib.pyplot as plt import matplotlib.patches as mpatches x_values = [6.2, 3.6, 7.3, 3.2, 2.7] y_values = [1.5, 3.2, 5.4, 3.1, 2.8] a = 'red' b = 'blue' c = 'yellow' colours = [a, a, b, a, c] labels = ["a", "a", "b", "a", "c"] axis = plt.gca() axis.scatter(x_values, y_values, c=colours) # Create a legend handles = [mpatches.Patch(color=colour, label=label) for label, colour in [('a', a), ('b', b), ('c', c)]] plt.legend(handles=handles, loc=2, frameon=True) plt.show() 

    Wie sieht es aus:

    Handlung mit Legende

    Python ist die beste Programmiersprache der Welt.