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()
-------------------------------------------------------------------
Erstellen einer Legende in Matplotlib
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.
Die zwei Fahrräder haben unterschiedliche Farben, wie willst Du die denn darstellen, wenn es in der Legende nur ein Fahrrad gibt?
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 Daten kommen aus einer externen Datenquelle. Ich hab versucht das Problem exemplarisch darzustellen.
Die beiden Fahrräder sollen die gleichen Kurvenfarbe haben.
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.Die zwei Fahrräder haben unterschiedliche Farben, wie willst Du die denn darstellen, wenn es in der Legende nur ein Fahrrad gibt?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()