Keine Griffe mit Etiketten zum Einfügen in die Legende gefunden

Salman Mehmood 15 Februar 2024
  1. Keine Griffe mit Etiketten zum Einfügen in die Legende gefunden
  2. Lösen Sie Keine Griffe mit Beschriftungen zum Einfügen in die Legende gefunden in Matplotlib
Keine Griffe mit Etiketten zum Einfügen in die Legende gefunden

Dieser Artikel demonstriert, wie wir die Warnung No handle with labels found to put in legend lösen können, wenn wir versuchen, etwas mit Matplotlib zu plotten.

Keine Griffe mit Etiketten zum Einfügen in die Legende gefunden

Matplotlib wird ausgiebig in verschiedenen Anwendungen verwendet und ist eine Python-Bibliothek, die darauf abzielt, den Benutzern bis zu einem gewissen Grad ähnliche Funktionen wie MATLAB zu bieten. Es erstellt statische, animierte und interaktive Visualisierungen von Daten für Analysen und andere Zwecke.

Beim Versuch, etwas mit Matplotlib zu zeichnen, kommt es häufig vor, dass wir bestimmte Teile unserer Visualisierungsdiagramme beschriften möchten, sei es zum Verständnis oder aus einem anderen Grund. Während dieses Vorgangs stoßen wir möglicherweise auf eine Warnung, die darauf hinweist, dass eine Legende aufgrund eines Fehlers nicht erstellt werden konnte.

Betrachten Sie den folgenden Code.

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(111)
ax.spines["left"].set_position("zero")
ax.spines["right"].set_color("none")
ax.spines["bottom"].set_position("zero")
ax.spines["top"].set_color("none")

plt.axis([-5, 5, -5, 5])

ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")

plt.grid()

plt.arrow(0, 0, 3, 1, head_width=0.2, color="r", length_includes_head=True)
plt.arrow(0, 0, 1, 3, head_width=0.2, color="g", length_includes_head=True)
plt.arrow(0, 0, 4, 4, head_width=0.2, color="b", length_includes_head=True)

plt.legend()
plt.show()

Nach der Ausführung des Programms sehen wir die folgende Ausgabe.

Problemausgabe

In dem oben erwähnten Code erhalten wir beim Versuch, das Diagramm zu zeichnen, einen Fehler, der wie folgt angegeben wird:

No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.

Hinweis: In den letzten Updates beginnt die Warnung jetzt mit Keine Künstler statt mit Keine Handles.

Wie aus dem Ausgabebild ersichtlich ist, wurde keine Legende erzeugt; Anstelle der Beschriftungen sehen wir nur die Plots.

Lösen Sie Keine Griffe mit Beschriftungen zum Einfügen in die Legende gefunden in Matplotlib

Die Warnung tritt auf, wenn Sie die label-Parameter nicht angegeben haben, bevor Sie die legend()-Methode für eine gezeichnete Figur aufrufen.

pyplot ist eine zustandsbasierte Schnittstelle zu Matplotlib, die das interaktive Zeichnen von Figuren in Python ermöglicht. Die Methode legend() kann den Achsen eine Legende hinzufügen.

Wenn wir jedoch die Option labels weglassen und dann die Funktion legend() aufrufen, erhalten wir die Fehlermeldung.

No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when `legend()` is called with no argument.

Im Folgenden sind einige Szenarien aufgeführt, in denen diese Warnung angezeigt wird.

Ursache 1: Es wurden keine Labels deklariert

Es kann vorkommen, dass die Beschriftungen, die in die Legende aufgenommen werden sollten, gar nicht erst deklariert wurden.

Betrachten Sie das folgende Beispiel.

plt.arrow(0, 0, 3, 1, head_width=0.2, color="r", length_includes_head=True)
plt.arrow(0, 0, 1, 3, head_width=0.2, color="g", length_includes_head=True)
plt.arrow(0, 0, 4, 4, head_width=0.2, color="b", length_includes_head=True)

In der obigen Pfeildeklaration wurde keinem von ihnen eine Beschriftung zugewiesen, was dazu führen kann, dass die Legende die Beschriftungen nicht findet, die der Legende hinzugefügt werden sollen.

Die Lösung ist in unserem Fall einfach, fügen Sie die Beschriftungen zu den Pfeilen hinzu.

plt.arrow(0, 0, 3, 1, head_width=0.2, color="r", length_includes_head=True, label="u")
plt.arrow(0, 0, 1, 3, head_width=0.2, color="g", length_includes_head=True, label="v")
plt.arrow(0, 0, 4, 4, head_width=0.2, color="b", length_includes_head=True, label="u+v")

Anstatt Labels innerhalb der Methode plt.arrow() zu deklarieren, können wir die Labels auch deklarieren, indem wir sie an die Funktion plt.legend() selbst übergeben.

Die Methode plt.legend() verwendet entweder eine Liste oder ein Tupel mit den erforderlichen Labels, die Sie möglicherweise in Ihrem Diagramm deklarieren möchten.

Betrachten Sie das folgende Beispiel.

plt.arrow(0, 0, 3, 1, head_width=0.2, color="r", length_includes_head=True)
plt.arrow(0, 0, 1, 3, head_width=0.2, color="g", length_includes_head=True)
plt.arrow(0, 0, 4, 4, head_width=0.2, color="b", length_includes_head=True)

plt.legend(["u", "v", "u+v"])

Nachdem die Beschriftungen nun definiert wurden, wird die Warnung nicht angezeigt und unser Diagramm wird erfolgreich gezeichnet, wie unten gezeigt.

Lösung 1

Es kann ein ziemlich häufiger Fehler sein, dass wir manchmal vergessen, die Etiketten für die Legende zu deklarieren. Es ist eine gute Praxis, die Beschriftungen immer dann zu deklarieren, wenn wir die Elemente des Diagramms deklarieren; Dieser Ansatz trägt dazu bei, die Wahrscheinlichkeit zu verringern, dass die Deklaration eines bestimmten Etiketts verpasst wird.

Wie aus dem Code ersichtlich, erlaubt matplotlib die Deklaration von Labels als Argumente für mehrere Funktionen, die verschiedene Plotelemente erzeugen (in unserem Fall plt.arrow()).

Ursache 2: Handlung nach Legende erstellt

Eine weitere Hauptursache für dieses Problem kann sein, dass die Reihenfolge, in der das Diagramm korrekt gezeichnet werden sollte, nicht korrekt eingehalten wird; Wenn beispielsweise eine Legende erstellt wird, bevor der Plot erstellt wird, wird die Warnung weiterhin angezeigt und die Legende wird nicht erstellt.

Betrachten Sie den folgenden Code.

plt.legend()  # Wrong Placement

plt.arrow(0, 0, 3, 1, head_width=0.2, color="b", length_includes_head=True)
plt.arrow(0, 0, 3, 4, head_width=0.2, color="g", length_includes_head=True)

Hier haben wir die Funktion legend() aufgerufen, bevor wir den eigentlichen Plot erstellt haben; Da beim Aufruf der Funktion legend() keine Beschriftungen (oder Diagramme) deklariert wurden, wird die Warnung angezeigt und die Legende bleibt leer.

Um dies zu beheben, stellen Sie sicher, dass legend() aufgerufen wird. Jeder Aspekt des Diagramms wurde mit geeigneten Beschriftungen gezeichnet.

In unserem Fall wäre das:

plt.arrow(0, 0, 3, 1, head_width=0.2, color="b", length_includes_head=True, label="x")
plt.arrow(0, 0, 3, 4, head_width=0.2, color="g", length_includes_head=True, label="y")

plt.legend()  # Correct placement

Nachdem die Reihenfolge von plt.legend() festgelegt wurde, enthält der Plot die definierte Legende.

Lösung 2

Vollständiger Code:

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(111)

ax.spines["left"].set_position("zero")
ax.spines["right"].set_color("none")
ax.spines["bottom"].set_position("zero")
ax.spines["top"].set_color("none")

plt.axis([-5, 5, -5, 5])

ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")

plt.grid()

plt.arrow(0, 0, 3, 1, head_width=0.2, color="r", length_includes_head=True, label="u")
plt.arrow(0, 0, 1, 3, head_width=0.2, color="g", length_includes_head=True, label="v")
plt.arrow(0, 0, 4, 4, head_width=0.2, color="b", length_includes_head=True, label="u+v")

plt.legend()
# plt.legend(['u','v','u+v'])
plt.show()
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn