Erstellen einer Legende in Matplotlib

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
ozi
User
Beiträge: 13
Registriert: Mittwoch 7. Juli 2021, 13:21

Hallo, beim erstellen eines Plots, hab ich folgendes Problem:

Ich kann zwar die Graphen, die ich habe labeln. Allerdings, wenn zwei Graphen dasselbe Label zugewiesen bekommen haben, erkennt das Programm nicht, dass es sich um dasselbe label handelt, und fügt in die Legende das selbe Label nochmal hinzu.


Bezogen auf mein Beispiel enthält die Legende zwei Labels die beide "Fahrrad" heißen.
Der Code hierfür sieht wie folgt aus:




-------------------------------------------------------------------
import matplotlib.pyplot as plt

#X und Y Werte, alle als String deklariert.
x_werte=["1","3","5","7","9","Art"]
in_data=[["1","5","10","12","12","Auto"],
["1","4","5","10","21","Fahrrad"],
["2","10","20","30","40","Roller"],
["1","5","5","7","20","Fahrrad"] ]


del(x_werte[-1])


i=0
while i<len(in_data):
y_werte=[]
for j in range(0,len(in_data[0])-1,1):
wert=float(in_data[j])

y_werte.append(wert)
label_string=in_data[len(in_data[0])-1]
label_string=str(label_string)
plt.plot(x_werte,y_werte,label=label_string)

i+=1



plt.legend()
plt.show()

-------------------------------------------------------------------
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Woher kommen denn die Listen?
Den Typ der Daten passt man gleich beim Laden an.
`del` ist keine Funktion, die Klammern daher irreführend.
Statt while benutzt man for und statt eines Indexes iteriert man direkt über die Elemente.
`label_string` ist schon ein String, den nochmal mit str umzuwandeln ist unnötig.

Code: Alles auswählen

import matplotlib.pyplot as plt

x_werte = ["1","3","5","7","9","Art"]
in_data = [
    ["1","5","10","12","12","Auto"],
    ["1","4","5","10","21","Fahrrad"],
    ["2","10","20","30","40","Roller"],
    ["1","5","5","7","20","Fahrrad"]
]

del x_werte[-1]

for row in in_data;
    y_werte = list(map(float, row[:-1]))
    plt.plot(x_werte, y_werte, label=row[-1])
    
plt.legend()
plt.show()
Die zwei Fahrräder haben unterschiedliche Farben, wie willst Du die denn darstellen, wenn es in der Legende nur ein Fahrrad gibt?
ozi
User
Beiträge: 13
Registriert: Mittwoch 7. Juli 2021, 13:21

Die Daten kommen aus einer externen Datenquelle. Ich hab versucht das Problem exemplarisch darzustellen.

Die beiden Fahrräder sollen die gleichen Kurvenfarbe haben.





Sirius3 hat geschrieben: Mittwoch 15. September 2021, 18:02 Woher kommen denn die Listen?
Den Typ der Daten passt man gleich beim Laden an.
`del` ist keine Funktion, die Klammern daher irreführend.
Statt while benutzt man for und statt eines Indexes iteriert man direkt über die Elemente.
`label_string` ist schon ein String, den nochmal mit str umzuwandeln ist unnötig.

Code: Alles auswählen

import matplotlib.pyplot as plt

x_werte = ["1","3","5","7","9","Art"]
in_data = [
    ["1","5","10","12","12","Auto"],
    ["1","4","5","10","21","Fahrrad"],
    ["2","10","20","30","40","Roller"],
    ["1","5","5","7","20","Fahrrad"]
]

del x_werte[-1]

for row in in_data;
    y_werte = list(map(float, row[:-1]))
    plt.plot(x_werte, y_werte, label=row[-1])
    
plt.legend()
plt.show()
Die zwei Fahrräder haben unterschiedliche Farben, wie willst Du die denn darstellen, wenn es in der Legende nur ein Fahrrad gibt?
Antworten