diff --git a/fit_app.py b/fit_app.py index 8b23835..5a18cc7 100644 --- a/fit_app.py +++ b/fit_app.py @@ -114,7 +114,7 @@ def process_fit(file_path): try: fit_file = FitFile(file_path) - print(f"Verarbeite FIT-Datei: {file_path}") + print(f"\nVerarbeite FIT-Datei: {file_path}") # Sammle alle record-Daten records = [] @@ -134,11 +134,11 @@ def process_fit(file_path): print(f"DataFrame erstellt mit {len(df)} Zeilen und Spalten: {list(df.columns)}") # Debugging: Schaue welche Spalten verfügbar sind - print(f"Verfügbare Spalten: {df.columns.tolist()}") + # print(f"Verfügbare Spalten: {df.columns.tolist()}") # Uncomment if needed - DEBUG purpose! # Suche nach Heart Rate in verschiedenen Formaten possible_hr_cols = [col for col in df.columns if 'heart' in col.lower() or 'hr' in col.lower()] - print(f"Mögliche Heart Rate Spalten: {possible_hr_cols}") + # print(f"Mögliche Heart Rate Spalten: {possible_hr_cols}") # Uncomment if needed - DEBUG purpose! # Standard-Spaltennamen für verschiedene FIT-Formate lat_cols = ['position_lat', 'lat', 'latitude'] @@ -241,12 +241,13 @@ def process_fit(file_path): df = safe_add_column_to_dataframe(df, 'heart_rate', heart_rate) # ############## - # MY DEBUG: + # ###################################### + # IF issues with heart_rate values, usw these DEBUG prints: #print(heart_rate) if 'heart_rate' in df.columns: df['heart_rate'] = pd.to_numeric(df['heart_rate'], errors='coerce') df['hr_smooth'] = df['heart_rate'].rolling(window=5, center=True).mean() - print(f"Heart rate range: {df['heart_rate'].min():.0f} - {df['heart_rate'].max():.0f} bpm") + # print(f"Heart rate range: {df['heart_rate'].min():.0f} - {df['heart_rate'].max():.0f} bpm") # Uncomment if needed - DEBUG purpose! else: print("Keine Heart Rate Daten gefunden!") df['heart_rate'] = np.nan @@ -255,6 +256,7 @@ def process_fit(file_path): print(f"Verarbeitete FIT-Datei: {len(df)} Datenpunkte") print(f"Distanz: {df['cum_dist_km'].iloc[-1]:.2f} km") print(f"Dauer: {df['duration_hms'].iloc[-1]}") + # ###################################### return df @@ -359,7 +361,7 @@ def create_map_plot(df): df, lat='lat', lon='lon', - zoom=13, + zoom=13.5, height=800 ) @@ -697,7 +699,7 @@ def create_speed_plot(df): line=dict(color='royalblue') )) fig.update_layout( - title=dict(text=f'Tempo über die Zeit (geglättet) - Durchschnittstempo: {mean_speed_kmh:.2f} km/h', font=dict(size=16)), + title=dict(text=f'Tempo über die Zeit (geglättet) - Ø {mean_speed_kmh:.2f} km/h', font=dict(size=16)), xaxis=dict(title='Zeit', tickformat='%H:%M', type='date'), yaxis=dict(title='Geschwindigkeit (km/h)', rangemode='tozero'), template='plotly_dark', @@ -862,7 +864,7 @@ def create_heart_rate_plot(df): -def create_pace_bars_plot(df): +def create_pace_bars_plot(df, formatted_pace=None): # Ensure time column is datetime if not pd.api.types.is_datetime64_any_dtype(df['time']): df['time'] = pd.to_datetime(df['time'], errors='coerce') @@ -920,45 +922,38 @@ def create_pace_bars_plot(df): # ######### - # Add horizontal reference line - X-Werte für gesamte Breite - # Calculate average pace + # Calculate average pace if not provided from Info-Banner function total_distance_km = df['cum_dist_km'].iloc[-1] total_seconds = df['time_diff_sec'].iloc[-1] # Average pace (min/km) - KORRIGIERT if total_distance_km > 0: pace_sec_per_km = total_seconds / total_distance_km - pace_min_per_km = pace_sec_per_km / 60 # Konvertiere zu Minuten pro km + pace_min = int(pace_sec_per_km // 60) + pace_sec = int(pace_sec_per_km % 60) + formatted_pace = f"{pace_min}:{pace_sec:02d} min/km" + # Numerischen Wert für die dash'ed Linie berechnen + avg_pace_numeric = pace_sec_per_km / 60 else: - pace_min_per_km = 0 + formatted_pace = "N/A" + avg_pace_numeric = 0 + # Add horizontal dash'ed reference line (avg_pace_numeric) fig.add_shape( type='line', x0=0, # Start bei 0 x1=total_distance_km, # Ende bei maximaler Distanz - y0=pace_min_per_km, - y1=pace_min_per_km, + y0=avg_pace_numeric, + y1=avg_pace_numeric, line=dict(color='gray', width=1, dash='dash'), ) - ## Optional: Text-Annotation für die durchschnittliche Pace - #fig.add_annotation( - # x=total_distance_km * 0.8, # Position bei 80% der Distanz - # y=pace_min_per_km, - # text=f"Ø {pace_min_per_km:.1f} min/km", - # showarrow=True, - # arrowhead=2, - # arrowcolor="gray", - # bgcolor="rgba(255,0,0,0.1)", - # bordercolor="gray", - # font=dict(color="white") - #) - - + title_text = f'Tempo je Kilometer' + title_text += f' - Ø {formatted_pace}' fig.update_layout( - title=dict(text='Tempo (min/km) je Kilometer', font=dict(size=16)), + title=dict(text=title_text, font=dict(size=16, color='white')), xaxis_title='Distanz (km)', yaxis_title='Minuten pro km', barmode='overlay',