Wie weise ich mehrere Labels gleichzeitig in Matplotlib zu?
Ich habe folgenden Datensatz:
x = [0, 1, 2, 3, 4]
y = [ [0, 1, 2, 3, 4],
[5, 6, 7, 8, 9],
[9, 8, 7, 6, 5] ]
Ich jetzt zeichnen Sie es mit:
import matplotlib.pyplot as plt
plt.plot(x, y)
Allerdings möchte ich zur Bezeichnung der 3 y-Datensätze mit diesem Befehl, der einen Fehler auslöst, wenn .legend()
heißt:
lineObjects = plt.plot(x, y, label=['foo', 'bar', 'baz'])
plt.legend()
File "./plot_nmos.py", line 33, in <module>
plt.legend()
...
AttributeError: 'list' object has no attribute 'startswith'
Wenn ich überprüfen das lineObjects
:
>>> lineObjects[0].get_label()
['foo', 'bar', 'baz']
>>> lineObjects[1].get_label()
['foo', 'bar', 'baz']
>>> lineObjects[2].get_label()
['foo', 'bar', 'baz']
Frage
Gibt es einen eleganten Weg zu weisen mehrere labels, die nur mit der .plot()
Methode?
InformationsquelleAutor der Frage Kit | 2012-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht möglich, in den plot dieser beiden arrays gegen einander unmittelbar (mit mindestens version 1.1.1), daher müssen Sie sich in einer Schleife über deine y-arrays. Mein Rat wäre, um eine Schleife über die Beschriftungen in der gleichen Zeit:
Edit: @gcalmettes wies darauf hin, dass als numpy-arrays ist es möglich, in den plot alle Zeilen gleichzeitig (durch Umsetzung). Siehe @gcalmettes Antwort & Kommentare für details.
InformationsquelleAutor der Antwort pelson
Können Sie Durchlaufen Ihre Linie Objekte-Liste, so dass Etiketten sind einzeln zugewiesen. Ein Beispiel mit der eingebauten python-
iter
Funktion:Edit: nach dem Update auf die matplotlib 1.1.1, es sieht aus wie die
plt.plot(x, y)
mit y-als Liste von Listen (soweit vom Autor nicht in Frage), funktioniert nicht mehr. Der Schritt, Plotten ohne iteration über die y-arrays ist immer noch möglich, dachte nach bestandener y alsnumpy.array
(unter der Annahme, (numpy)[http://numpy.scipy.org/] wie zuvor eingeführt).In diesem Fall verwenden Sie
plt.plot(x, y)
(wenn die Daten in der 2D-y-array angeordnet sind, wie Spalten, [1. Achse]) oderplt.plot(x, y.transpose())
(wenn die Daten in der 2D-y-array angeordnet sind, als Zeilen [Achse 0])Edit 2: wie schon von @pelson (siehe Kommentar unten), die
iter
Funktion ist unnötig und einfachplt.legend(lineObjects, ('foo', 'bar', 'baz'))
funktioniert perfektInformationsquelleAutor der Antwort gcalmettes
Kam ich über das gleiche problem und jetzt habe ich eine Lösung gefunden, dass ist den meisten einfach! Hoffentlich ist das nicht zu spät für Sie. Kein iterator, nur weisen Sie Ihr Ergebnis auf eine Struktur...
Sieht wie folgt aus:
InformationsquelleAutor der Antwort Milla Well
Sie können die Etiketten beim Plotten der Kurven
InformationsquelleAutor der Antwort imsc
Im Falle von numpy matrix-plot weisen mehrere Legenden auf einmal für jede Spalte
Ich möchte zur Beantwortung dieser Frage auf der Grundlage zeichnen Sie eine matrix mit zwei Spalten.
Sagen, Sie haben ein 2-Säulen-matrix
Ret
dann kann man diesen code verwenden, so weisen Sie mehrere Etiketten auf einmal
Ich hoffe, das hilft
InformationsquelleAutor der Antwort rsc05