Private
Public Access
1
0

callouts on multiflex

This commit is contained in:
Sander Roosendaal
2017-07-08 16:26:37 +02:00
parent e7e97dfef3
commit b8e6817f18
2 changed files with 114 additions and 110 deletions

View File

@@ -1237,12 +1237,29 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
) )
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize,hover' TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize'
if groupby != 'date':
hover = HoverTool(names=['data'],
tooltips = [
(groupby,'@groupval{1.1}')
])
else:
hover = HoverTool(names=['data'],
tooltips = [
(groupby,'@groupval')
])
hover.mode = 'mouse'
TOOLS = [SaveTool(),PanTool(),BoxZoomTool(),WheelZoomTool(),
ResetTool(),TapTool(),ResizeTool(),hover]
plot = Figure(x_axis_type=x_axis_type,y_axis_type=y_axis_type, plot = Figure(x_axis_type=x_axis_type,y_axis_type=y_axis_type,
tools=TOOLS, tools=TOOLS,
toolbar_location="above", toolbar_location="above",
toolbar_sticky=False) toolbar_sticky=False)
# add watermark # add watermark
plot.extra_y_ranges = {"watermark": watermarkrange} plot.extra_y_ranges = {"watermark": watermarkrange}
plot.extra_x_ranges = {"watermark": watermarkrange} plot.extra_x_ranges = {"watermark": watermarkrange}
@@ -1293,20 +1310,6 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
minutes = ["%M"] minutes = ["%M"]
) )
hover = plot.select(dict(type=HoverTool))
if groupby != 'date':
hover.tooltips = OrderedDict([
(groupby,'@groupval{1.1}'),
])
else:
hover.tooltips = OrderedDict([
(groupby,'@groupval'),
])
hover.mode = 'mouse'
script,div = components(plot) script,div = components(plot)

View File

@@ -3515,105 +3515,106 @@ def multiflex_view(request,userid=0,
else: else:
return HttpResponse("invalid form") return HttpResponse("invalid form")
fieldlist,fielddict = dataprep.getstatsfields()
fieldlist = [xparam,yparam,groupby,
'workoutid','spm','driveenergy',
'workoutstate']
# prepare data frame
datadf = dataprep.read_cols_df_sql(ids,fieldlist)
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
datadf = dataprep.filter_df(datadf,'spm',spmmin,
largerthan=True)
datadf = dataprep.filter_df(datadf,'spm',spmmax,
largerthan=False)
datadf = dataprep.filter_df(datadf,'driveenergy',workmin,
largerthan=True)
datadf = dataprep.filter_df(datadf,'driveneergy',workmax,
largerthan=False)
datadf.dropna(axis=0,how='any',inplace=True)
datemapping = {
w.id:w.date for w in workouts
}
datadf['date'] = datadf['workoutid']
datadf['date'].replace(datemapping,inplace=True)
today = datetime.date.today()
datadf['days ago'] = map(lambda x : x.days, datadf.date - today)
if groupby != 'date':
bins = np.arange(datadf[groupby].min()-binsize,
datadf[groupby].max()+binsize,
binsize)
groups = datadf.groupby(pd.cut(datadf[groupby],bins,labels=False))
else:
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
groups = datadf.groupby(pd.cut(datadf['days ago'], bins,
labels=False))
xvalues = groups.mean()[xparam]
yvalues = groups.mean()[yparam]
xerror = groups.std()[xparam]
yerror = groups.std()[yparam]
groupsize = groups.count()[xparam]
#groupsize = 15.*np.log10(1+99.*groupsize/float(max(groupsize)))
groupsize = 30.*np.sqrt(groupsize/float(max(groupsize)))
df = pd.DataFrame({
xparam:xvalues,
yparam:yvalues,
'xerror':xerror,
'yerror':yerror,
'groupsize':groupsize,
})
if groupby != 'date':
try:
df['groupval'] = groups.mean()[groupby],
except ValueError:
df['groupval'] = groups.mean()[groupby].fillna(value=0)
else:
try:
df['groupval'] = [x.strftime("%Y-%m-%d") for x in groups.min()[groupby]]
except AttributeError:
df['groupval'] = groups.mean()['days ago'].fillna(value=0)
if userid == 0:
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script,div = interactive_multiflex(df,xparam,yparam,
groupby,
extratitle=extratitle,
ploterrorbars=ploterrorbars)
return render(request,'multiflex.html',
{'interactiveplot':script,
'the_div':div,
'chartform':chartform,
'userid':userid,
'teams':get_my_teams(request.user),
})
else: else:
url = reverse(user_multiflex_select) url = reverse(user_multiflex_select)
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
fieldlist,fielddict = dataprep.getstatsfields()
fieldlist = [xparam,yparam,groupby,
'workoutid','spm','driveenergy',
'workoutstate']
# prepare data frame
datadf = dataprep.read_cols_df_sql(ids,fieldlist)
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
datadf = dataprep.filter_df(datadf,'spm',spmmin,
largerthan=True)
datadf = dataprep.filter_df(datadf,'spm',spmmax,
largerthan=False)
datadf = dataprep.filter_df(datadf,'driveenergy',workmin,
largerthan=True)
datadf = dataprep.filter_df(datadf,'driveneergy',workmax,
largerthan=False)
datadf.dropna(axis=0,how='any',inplace=True)
datemapping = {
w.id:w.date for w in workouts
}
datadf['date'] = datadf['workoutid']
datadf['date'].replace(datemapping,inplace=True)
today = datetime.date.today()
datadf['days ago'] = map(lambda x : x.days, datadf.date - today)
if groupby != 'date':
bins = np.arange(datadf[groupby].min()-binsize,
datadf[groupby].max()+binsize,
binsize)
groups = datadf.groupby(pd.cut(datadf[groupby],bins,labels=False))
else:
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
groups = datadf.groupby(pd.cut(datadf['days ago'], bins,
labels=False))
xvalues = groups.mean()[xparam]
yvalues = groups.mean()[yparam]
xerror = groups.std()[xparam]
yerror = groups.std()[yparam]
groupsize = groups.count()[xparam]
#groupsize = 15.*np.log10(1+99.*groupsize/float(max(groupsize)))
groupsize = 30.*np.sqrt(groupsize/float(max(groupsize)))
df = pd.DataFrame({
xparam:xvalues,
yparam:yvalues,
'xerror':xerror,
'yerror':yerror,
'groupsize':groupsize,
})
if groupby != 'date':
try:
df['groupval'] = groups.mean()[groupby],
except ValueError:
df['groupval'] = groups.mean()[groupby].fillna(value=0)
else:
try:
df['groupval'] = [x.strftime("%Y-%m-%d") for x in groups.min()[groupby]]
except AttributeError:
df['groupval'] = groups.mean()['days ago'].fillna(value=0)
if userid == 0:
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script,div = interactive_multiflex(df,xparam,yparam,
groupby,
extratitle=extratitle,
ploterrorbars=ploterrorbars)
return render(request,'multiflex.html',
{'interactiveplot':script,
'the_div':div,
'chartform':chartform,
'userid':userid,
'teams':get_my_teams(request.user),
})
# Box plots # Box plots
@user_passes_test(ispromember,login_url="/",redirect_field_name=None) @user_passes_test(ispromember,login_url="/",redirect_field_name=None)
def user_boxplot_select(request, def user_boxplot_select(request,