diff --git a/jogging_dashboard_browser_app.py b/jogging_dashboard_browser_app.py index 1f4e63f..22ead45 100644 --- a/jogging_dashboard_browser_app.py +++ b/jogging_dashboard_browser_app.py @@ -1115,30 +1115,41 @@ def create_heart_rate_plot(df): max_hr_estimated = 200 # oder z. B. 220 - alter ## Definiere feste HR-Zonen in BPM - #zones = [ - # {"name": "Zone 1", "lower": 0, "upper": 124, "color": "#F4A4A3"}, # Regeneration (Recovery) - # {"name": "Zone 2", "lower": 124, "upper": 154, "color": "#EF7476"}, # Grundlagenausdauer (Endurance) - # {"name": "Zone 3", "lower": 154, "upper": 169, "color": "#EA4748"}, # Tempo (Aerob) - # {"name": "Zone 4", "lower": 169, "upper": 184, "color": "#E02628"}, # Schwelle (Threshold) (Anaerob) - # {"name": "Zone 5", "lower": 184, "upper": max_hr_estimated, "color": "#B71316"}, # Neuromuskulär (Neuromuskulär) - #] zones = [ - {"name": "Zone 1", "lower": 0, "upper": 124, "color": "#4A4A4A"}, # Regeneration (Recovery) (#111111 Transparent) + {"name": "Zone 0", "lower": 0, "upper": 40, "color": "#333333"}, # Unrealistischer Wertebereich + {"name": "Zone 1", "lower": 40, "upper": 124, "color": "#4A4A4A"}, # Regeneration (Recovery) (#111111 Transparent) {"name": "Zone 2", "lower": 124, "upper": 154, "color": "#87CEFA"}, # Grundlagenausdauer (Endurance) {"name": "Zone 3", "lower": 154, "upper": 169, "color": "#90EE90"}, # Tempo (Aerob) {"name": "Zone 4", "lower": 169, "upper": 184, "color": "#FFDAB9"}, # Schwelle (Threshold) (Anaerob) {"name": "Zone 5", "lower": 184, "upper": max_hr_estimated, "color": "#FFB6C1"}, # Neuromuskulär (Neuromuskulär) ] - # Zeichne Zonen als Hintergrund (horizontale Rechtecke) + # Berechne die Anzahl der Werte in jeder Zone + total_count = len(valid_hr) for zone in zones: + # Filter für die Zone + zone_count = valid_hr[(valid_hr >= zone["lower"]) & (valid_hr < zone["upper"])].count() + zone_percentage = (zone_count / total_count) * 100 if total_count > 0 else 0 + + # Zeichne die Zone als Hintergrund fig.add_hrect( y0=zone["lower"], y1=zone["upper"], fillcolor=zone["color"], opacity=0.15, line_width=0, - annotation_text=zone["name"], # optional: Name der Zone einblenden - annotation_position="top left" + ) + + # Annotation für die Zone (Name und Prozentsatz) + fig.add_annotation( + x=df['time_loc'].iloc[-1], # Rechts am Plot + y=zone["upper"] -6 , # Oben in der Zone + #y=(zone["lower"] + zone["upper"]) / 2, # Falls Pos. mittig je Zone gewünscht + text=f"{zone['name']}
{zone_percentage:.1f}%", + showarrow=False, + font=dict(color="white", size=10), + align="left", + bgcolor="rgba(0,0,0,0.5)", + bordercolor="gray", ) # Layout @@ -1155,7 +1166,7 @@ def create_heart_rate_plot(df): ), yaxis=dict( title='Herzfrequenz (bpm)', - range=[80, 200] # Statt rangemode='tozero' + range=[70, 200] # instead of: rangemode='tozero' ), template='plotly_dark', paper_bgcolor='#1e1e1e',