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: zwei Plots auf den gleichen Achsen mit verschiedenen linken rechten Skalen
  • Machen Sie eine benutzerdefinierte Farbkarte mit Matplotlib in Python
  • Ändere matplotlib backend in Python virtualenv
  • Installieren von matplotlib in einem virtualenv mit pip auf einem Mac
  • Legende zeigt nur ein Etikett beim Plotten mit Pandas
  • Python-Threading-Rückkehr-Steuerung zum Terminal, während ein Rahmen offen bleibt
  • 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.