Mehrere Dataframes in einem Graphen plotten

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo,

ich habe eine Vielzahl an csv Dateien in einem Ordner liegen. Darin enthalten ist jeweils eine Kraft-Weg-Kurve (XY-Graph). Diese möchte ich alle in einem gemeinsamen Diagramm darstellen. Dazu habe ich mir ein Code geschrieben, welcher mir über eine For-Schleife die csv Dateien in ein Dataframe liest. Jetzt möchte ich alle Kurven in einem Diagramm darstellen. Der Code führt jedoch zum Fehler "AttributeError: Line2D.set() got an unexpected keyword argument 'ax'". Wo muss ich den Code korrigieren, dass er durchläuft?

Code: Alles auswählen

n_count_loops = 0
fig, ax = plt.subplots(figsize=(20, 10))

for file in a_filtered_data:
    
    n_count_loops = n_count_loops + 1
    
        
    df_force_displacement_curve = pd.read_csv(file, sep=';', decimal=",", names = ['Verschiebung', 'Kraft'])
        
    n_max_force = df_force_displacement_curve['Kraft'].max()
        
    if n_max_force < 0.6:
        color = 'black'
    else:
        color = 'blue'
    
    print('Kurve ' + str(n_count_loops) + ' von ' + str(len(a_filtered_data)))
    
    plt.plot(df_force_displacement_curve['Verschiebung'], df_force_displacement_curve['Kraft'], ax=ax, color=color, linewidth=0.4)

plt.grid()
plt.savefig('Kurvenschar_FTB_Fuegen.png')      
plt.show()   
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum beginnen alle Deine Variablennamen mit einem a_ oder einem n_? Namen sollten aussagekräftig sein und nicht zum Rätseln einladen.
`file` ist wahrscheinlich ein `filename`.
Wenn man einen Zähler braucht, dann benutzt man enumerate, statt von Hand zu zählen.
Strings stückelt man nicht mit + zusammen, sondern benutzt f-Strings.
Wo in der Dokumentation hast Du gefunden, dass es sowas wie den Parameter ax gibt?

Code: Alles auswählen

figure, axes = plt.subplots(figsize=(20, 10))

for index, filename in enumerate(filenames_of_filtered_data, 1):
    print(f'Kurve {index} von {len(filenames_of_filtered_data)}')
    force_displacement_curve = pd.read_csv(filename, sep=';', decimal=",", names=['Verschiebung', 'Kraft'])
    max_force = force_displacement_curve['Kraft'].max()
    color = 'black' if max_force < 0.6 else 'blue'
    axes.plot(force_displacement_curve['Verschiebung'], force_displacement_curve['Kraft'], color=color, linewidth=0.4)

figure.savefig('Kurvenschar_FTB_Fuegen.png')
figure.show()
Antworten