From e8e7312fb6dd638f6d6eb9ec7235f2d8bf4ab00d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 15 May 2017 21:17:17 +0200 Subject: [PATCH 1/2] added title to box plot --- rowers/interactiveplots.py | 4 ++-- rowers/templates/boxplot.html | 2 +- rowers/templates/user_boxplot_select.html | 2 +- rowers/urls.py | 2 ++ rowers/views.py | 29 ++++++++++++++++++++--- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index a17c74f0..22dfac72 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -87,11 +87,11 @@ def tailwind(bearing,vwind,winddir): from rowers.dataprep import nicepaceformat,niceformat from rowers.dataprep import timedeltaconv -def interactive_boxchart(datadf,fieldname): +def interactive_boxchart(datadf,fieldname,extratitle=''): TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,resize' plot = BoxPlot(datadf, values=fieldname, label='date', legend=False, - title=axlabels[fieldname], + title=axlabels[fieldname]+' '+extratitle, outliers=False, tools=TOOLS, x_mapper_type='datetime') diff --git a/rowers/templates/boxplot.html b/rowers/templates/boxplot.html index ce250dd2..45b14144 100644 --- a/rowers/templates/boxplot.html +++ b/rowers/templates/boxplot.html @@ -38,7 +38,7 @@

Box Chart

-
+ {% csrf_token %} {{ chartform.as_table }} diff --git a/rowers/templates/user_boxplot_select.html b/rowers/templates/user_boxplot_select.html index 34d8d763..5ac62f5c 100644 --- a/rowers/templates/user_boxplot_select.html +++ b/rowers/templates/user_boxplot_select.html @@ -70,7 +70,7 @@ - +
diff --git a/rowers/urls.py b/rowers/urls.py index d8086872..56c90669 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -227,6 +227,8 @@ urlpatterns = [ url(r'^workout/(?P\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view), url(r'^workout/(?P\d+)/tpuploadw/$',views.workout_tp_upload_view), url(r'^multi-compare$',views.multi_compare_view), + url(r'^user-boxplot/(?P\d+)$',views.boxplot_view), + url(r'^user-boxplot/$',views.boxplot_view), url(r'^user-boxplot$',views.boxplot_view), url(r'^me/teams/$',views.rower_teams_view), url(r'^team/(?P\d+)/$',views.team_view), diff --git a/rowers/views.py b/rowers/views.py index 2d0b8e8b..1621f41e 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -3032,7 +3032,10 @@ def boxplot_view(request,userid=0, includereststrokes = options['includereststrokes'] workstrokesonly = not includereststrokes - + + if userid==0: + userid = request.user.id + if request.method == 'POST' and 'workouts' in request.POST: form = WorkoutMultipleCompareForm(request.POST) chartform = BoxPlotChoiceForm(request.POST) @@ -3064,13 +3067,24 @@ def boxplot_view(request,userid=0, datadf['workoutid'].replace(datemapping,inplace=True) datadf.rename(columns={"workoutid":"date"},inplace=True) datadf = datadf.sort_values(['date']) - script,div = interactive_boxchart(datadf,plotfield) + + if userid == 0: + extratitle = '' + else: + u = User.objects.get(id=userid) + extratitle = ' '+u.first_name+' '+u.last_name + + + + script,div = interactive_boxchart(datadf,plotfield, + extratitle=extratitle) return render(request,'boxplot.html', {'interactiveplot':script, 'the_div':div, 'chartform':chartform, + 'userid':userid, 'teams':get_my_teams(request.user), }) else: @@ -3101,13 +3115,22 @@ def boxplot_view(request,userid=0, datadf['workoutid'].replace(datemapping,inplace=True) datadf.rename(columns={"workoutid":"date"},inplace=True) datadf = datadf.sort_values(['date']) - script,div = interactive_boxchart(datadf,plotfield) + + if userid == 0: + extratitle = '' + else: + u = User.objects.get(id=userid) + extratitle = ' '+u.first_name+' '+u.last_name + + script,div = interactive_boxchart(datadf,plotfield, + extratitle=extratitle) return render(request,'boxplot.html', {'interactiveplot':script, 'the_div':div, 'chartform':chartform, + 'userid':userid, 'teams':get_my_teams(request.user), }) else: From f0a35aa8c047cb7f79d0ab777a2d831b87ad5eaa Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 16 May 2017 10:10:43 +0200 Subject: [PATCH 2/2] fixed a few bgs --- rowers/interactiveplots.py | 5 ++++- rowers/views.py | 16 +++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 22dfac72..920b4677 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1404,7 +1404,10 @@ def interactive_flex_chart2(id=0,promember=0, if rowdata.empty: return "","No valid data" else: - rowdata.sort_values(by='time',ascending=True,inplace=True) + try: + rowdata.sort_values(by='time',ascending=True,inplace=True) + except KeyError: + pass workoutstateswork = [1,4,5,8,9,6,7] workoutstatesrest = [3] diff --git a/rowers/views.py b/rowers/views.py index 1621f41e..79547d54 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4368,18 +4368,20 @@ def workout_stats_view(request,id=0,message="",successmessage=""): intensityfactor = normp/float(r.ftp) tss = 100.*((duration*normp*intensityfactor)/(3600.*r.ftp)) + if not np.isnan(tss): + otherstats['tss'] = { + 'verbose_name':'rScore', + 'value':int(tss), + 'unit':'' + } + + if not np.isnan(normp): otherstats['np'] = { 'verbose_name':'rPower', 'value':int(10*normp)/10., 'unit':'Watt' } - - otherstats['tss'] = { - 'verbose_name':'rScore', - 'value':int(tss), - 'unit':'' - } - + # HR Drift tmax = datadf['time'].max() tmin = datadf['time'].min()