From 8f7ec0dd92e7a9787d6c186388b08cb78685c3bd Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 20 Jul 2023 13:13:29 +0200 Subject: [PATCH] fixing performance plot --- rowers/interactiveplots.py | 44 +++++------- rowers/templates/performancemanager.html | 85 ++++++++++++----------- rowers/tests/testdata/testdata.tcx.gz | Bin 3999 -> 4000 bytes 3 files changed, 60 insertions(+), 69 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 3d84fb68..67dcbbf7 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1870,6 +1870,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= ) ) + plot = figure(tools=TOOLS, x_axis_type='datetime', width=900, height=300, toolbar_location="above", @@ -1898,6 +1899,15 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= y_range_name="watermark", ) + fitlabel = 'Fitness' + fatiguelabel = 'Fatigue' + formlabel = 'Freshness' + rightaxlabel = 'Freshness' + if dofatigue: # pragma: no cover + yaxlabel = 'Fitness/Fatigue' + else: + yaxlabel = 'Fitness' + if modelchoice == 'banister': # pragma: no cover fitlabel = 'PTE (fitness)' fatiguelabel = 'NTE (fatigue)' @@ -1907,31 +1917,14 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= yaxlabel = 'PTE/NTE' else: yaxlabel = 'PTE' - else: - fitlabel = 'Fitness' - fatiguelabel = 'Fatigue' - formlabel = 'Freshness' - rightaxlabel = 'Freshness' - if dofatigue: # pragma: no cover - yaxlabel = 'Fitness/Fatigue' - else: - yaxlabel = 'Fitness' - # if showtests: - # plot.circle('date','testpower',source=source,fill_color='green',size=10, - # legend_label='Your best workouts') plot.xaxis.axis_label = None plot.yaxis.axis_label = yaxlabel y2rangemin = df.loc[:, ['form']].min().min() y2rangemax = df.loc[:, ['form']].max().max() - # if dofatigue and showtests: - # y1rangemin = df.loc[:,['testpower','fitness','fatigue']].min().min() - # y1rangemax = df.loc[:,['testpower','fitness','fatigue']].max().max()*1.02 - # elif showtests: - # y1rangemin = df.loc[:,['testpower','fitness']].min().min() - # y1rangemax = df.loc[:,['testpower','fitness']].max().max()*1.02 + if dofatigue: # pragma: no cover y1rangemax = df.loc[:, ['fitness', 'fatigue']].max().max()*1.02 else: @@ -1940,7 +1933,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= if doform: # pragma: no cover plot.extra_y_ranges["yax2"] = Range1d(start=y2rangemin, end=y2rangemax) plot.add_layout(LinearAxis(y_range_name="yax2", - axis_label=rightaxlabel), "right") + axis_label=rightaxlabel), "right") plot.line('date', 'fitness', source=source, color='blue', legend_label=fitlabel) @@ -1957,7 +1950,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= plot.legend.location = "top_left" - plot.sizing_mode = 'scale_both' + #plot.sizing_mode = 'scale_both' startdate = datetime.datetime.combine( startdate, datetime.datetime.min.time()) @@ -1977,7 +1970,6 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= linked_crosshair = CrosshairTool(dimensions='height') hover.tooltips = OrderedDict([ - # (legend_label,'@testpower'), ('Date', '@fdate'), (fitlabel, '@fitness{int}'), (fatiguelabel, '@fatigue{int}'), @@ -1987,7 +1979,6 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= if showtests: hover.tooltips = OrderedDict([ - # (legend_label,'@testpower'), ('Date', '@fdate'), (fitlabel, '@fitness{int}'), (fatiguelabel, '@fatigue{int}'), @@ -2008,7 +1999,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= plot2.vbar(x=df['date'], top=df['impulse'], color='gray') plot2.vbar(x=df['date'], top=0*df['testpower']+df['impulse'], color='red') - plot2.sizing_mode = 'scale_both' + #plot2.sizing_mode = 'scale_both' plot2.yaxis.axis_label = 'Impulse' plot2.xaxis.axis_label = 'Date' @@ -2016,7 +2007,6 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= plot2.add_tools(linked_crosshair) mylayout = layoutcolumn([plot, plot2]) - #mylayout.sizing_mode = 'stretch_both' try: script, div = components(mylayout) @@ -3566,7 +3556,7 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, watermarkh = 35 watermarkanchor = 'bottom_right' plot.extra_y_ranges = {"watermark": watermarkrange} - plot.sizing_mode = 'scale_both' + #plot.sizing_mode = 'scale_both' plot.image_url([watermarkurl], 1.8*max(thesecs), watermarky, watermarkw, watermarkh, @@ -3895,7 +3885,7 @@ def interactive_cpchart(rower, thedistances, thesecs, theavpower, watermarkh = 35 watermarkanchor = 'bottom_right' plot.extra_y_ranges = {"watermark": watermarkrange} - plot.sizing_mode = 'scale_both' + #plot.sizing_mode = 'scale_both' plot.image_url([watermarkurl], 1.8*max(thesecs), watermarky, watermarkw, watermarkh, @@ -6838,7 +6828,7 @@ def interactive_otw_advanced_pace_chart(id=0, promember=0): watermarkanchor = 'bottom_right' plot.extra_y_ranges = {"watermark": watermarkrange} plot.extra_x_ranges = {"watermark": watermarkrange} - plot.sizing_mode = 'scale_both' + #plot.sizing_mode = 'scale_both' plot.image_url([watermarkurl], watermarkx, watermarky, watermarkw, watermarkh, diff --git a/rowers/templates/performancemanager.html b/rowers/templates/performancemanager.html index f7ae5451..c0fd3040 100644 --- a/rowers/templates/performancemanager.html +++ b/rowers/templates/performancemanager.html @@ -11,52 +11,53 @@ {% endblock %} diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index cf1a7d645ac7eacb009da34982c10fa62667f728..9e1d96dae7f39b468626d35b8dd2bb89a78428d9 100644 GIT binary patch delta 3914 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 YdGRPcjX%<*5AXaBpQF~)1jK*=0GI>^RsaA1 delta 3913 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 X7Z20Zc#$rBc;|m6-&$hC1AqYl_R`=A