Merge branch 'release/v9.56'
This commit is contained in:
@@ -457,7 +457,7 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
||||
)
|
||||
|
||||
plot = Figure(tools=TOOLS,
|
||||
toolbar_sticky=False)
|
||||
toolbar_sticky=False,toolbar_location="above")
|
||||
|
||||
# add watermark
|
||||
watermarkurl = "/static/img/logo7.png"
|
||||
@@ -493,49 +493,49 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
||||
|
||||
plot.add_layout(avf)
|
||||
|
||||
peakflabel = Label(x=455,y=530,x_units='screen',y_units='screen',
|
||||
peakflabel = Label(x=355,y=430,x_units='screen',y_units='screen',
|
||||
text="Fpeak: {peakforceav:6.2f}".format(peakforceav=peakforceav),
|
||||
background_fill_alpha=.7,
|
||||
background_fill_color='white',
|
||||
text_color='blue',
|
||||
)
|
||||
|
||||
avflabel = Label(x=465,y=500,x_units='screen',y_units='screen',
|
||||
avflabel = Label(x=365,y=400,x_units='screen',y_units='screen',
|
||||
text="Favg: {averageforceav:6.2f}".format(averageforceav=averageforceav),
|
||||
background_fill_alpha=.7,
|
||||
background_fill_color='white',
|
||||
text_color='blue',
|
||||
)
|
||||
|
||||
catchlabel = Label(x=460,y=470,x_units='screen',y_units='screen',
|
||||
catchlabel = Label(x=360,y=370,x_units='screen',y_units='screen',
|
||||
text="Catch: {catchav:6.2f}".format(catchav=catchav),
|
||||
background_fill_alpha=0.7,
|
||||
background_fill_color='white',
|
||||
text_color='red',
|
||||
)
|
||||
|
||||
peakforceanglelabel = Label(x=420,y=440,x_units='screen',y_units='screen',
|
||||
peakforceanglelabel = Label(x=320,y=340,x_units='screen',y_units='screen',
|
||||
text="Peak angle: {peakforceangleav:6.2f}".format(peakforceangleav=peakforceangleav),
|
||||
background_fill_alpha=0.7,
|
||||
background_fill_color='white',
|
||||
text_color='red',
|
||||
)
|
||||
|
||||
finishlabel = Label(x=455,y=410,x_units='screen',y_units='screen',
|
||||
finishlabel = Label(x=355,y=310,x_units='screen',y_units='screen',
|
||||
text="Finish: {finishav:6.2f}".format(finishav=finishav),
|
||||
background_fill_alpha=0.7,
|
||||
background_fill_color='white',
|
||||
text_color='red',
|
||||
)
|
||||
|
||||
sliplabel = Label(x=470,y=380,x_units='screen',y_units='screen',
|
||||
sliplabel = Label(x=370,y=280,x_units='screen',y_units='screen',
|
||||
text="Slip: {slipav:6.2f}".format(slipav=slipav),
|
||||
background_fill_alpha=0.7,
|
||||
background_fill_color='white',
|
||||
text_color='red',
|
||||
)
|
||||
|
||||
washlabel = Label(x=460,y=350,x_units='screen',y_units='screen',
|
||||
washlabel = Label(x=360,y=250,x_units='screen',y_units='screen',
|
||||
text="Wash: {washav:6.2f}".format(washav=washav),
|
||||
background_fill_alpha=0.7,
|
||||
background_fill_color='white',
|
||||
@@ -646,7 +646,8 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
||||
peakflabel.text = 'Fpeak: '+peakforceav.toFixed(2)
|
||||
peakforceanglelabel.text = 'Peak angle: '+peakforceangleav.toFixed(2)
|
||||
|
||||
source.trigger('change');
|
||||
// source.trigger('change');
|
||||
source.change.emit();
|
||||
""")
|
||||
|
||||
slider_spm_min = Slider(start=15.0, end=55,value=15.0, step=.1,
|
||||
@@ -2813,7 +2814,6 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
if yparam2 != 'pace' and yparam2 != 'time':
|
||||
plot.add_layout(y2label)
|
||||
|
||||
|
||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||
x1means=x1means,
|
||||
y1means=y1means,
|
||||
@@ -2827,11 +2827,16 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
var y1 = data['y1']
|
||||
var y2 = data['y2']
|
||||
var spm1 = data['spm']
|
||||
|
||||
var index1 = data['index']
|
||||
|
||||
var distance1 = data['distance']
|
||||
var power1 = data['power']
|
||||
var driveenergy1 = data['driveenergy']
|
||||
var xname = data['xname'][0]
|
||||
var yname1 = data['yname1'][0]
|
||||
var yname2 = data['yname2'][0]
|
||||
var workoutid1 = data['workoutid'][0]
|
||||
|
||||
var minspm = minspm.value
|
||||
var maxspm = maxspm.value
|
||||
@@ -2846,14 +2851,18 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
data2['x1'] = []
|
||||
data2['y1'] = []
|
||||
data2['y2'] = []
|
||||
data2['spm'] = []
|
||||
data2['index'] = []
|
||||
data2['distance'] = []
|
||||
data2['power'] = []
|
||||
data2['x1mean'] = []
|
||||
data2['y1mean'] = []
|
||||
data2['y2mean'] = []
|
||||
data2['xvals'] = []
|
||||
data2['y1vals'] = []
|
||||
data2['y2vals'] = []
|
||||
data2['driveenergy'] = []
|
||||
data2['workoutid'] = []
|
||||
data2['xname'] = []
|
||||
data2['yname1'] = []
|
||||
data2['yname2'] = []
|
||||
data2['spm'] = []
|
||||
|
||||
for (i=0; i<x1.length; i++) {
|
||||
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
|
||||
@@ -2863,7 +2872,14 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
data2['y1'].push(y1[i])
|
||||
data2['y2'].push(y2[i])
|
||||
data2['spm'].push(spm1[i])
|
||||
data2['index'].push(index1[i])
|
||||
data2['driveenergy'].push(driveenergy1[i])
|
||||
data2['distance'].push(distance1[i])
|
||||
data2['power'].push(power1[i])
|
||||
data2['workoutid'].push(workoutid1)
|
||||
data2['xname'].push(xname)
|
||||
data2['yname1'].push(yname1)
|
||||
data2['yname2'].push(yname2)
|
||||
|
||||
xm += x1[i]
|
||||
ym1 += y1[i]
|
||||
@@ -2873,13 +2889,17 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
xm /= data2['x1'].length
|
||||
ym1 /= data2['x1'].length
|
||||
ym2 /= data2['x1'].length
|
||||
|
||||
data2['x1mean'] = [xm,xm]
|
||||
data2['y1mean'] = [ym1,ym1]
|
||||
data2['y2mean'] = [ym2,ym2]
|
||||
for (i=0; i<data2['x1'].length; i++) {
|
||||
data2['x1mean'].push(xm)
|
||||
data2['y1mean'].push(ym1)
|
||||
data2['y2mean'].push(ym2)
|
||||
}
|
||||
|
||||
x1means.location = xm
|
||||
y1means.location = ym1
|
||||
y2means.location = ym2
|
||||
@@ -2887,7 +2907,7 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
||||
y2label.text = yname2+': '+(ym2).toFixed(2)
|
||||
xlabel.text = xname+': '+(xm).toFixed(2)
|
||||
|
||||
source2.trigger('change');
|
||||
source2.change.emit();
|
||||
""")
|
||||
|
||||
slider_spm_min = Slider(start=15.0, end=55,value=15.0, step=.1,
|
||||
@@ -3353,6 +3373,10 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
|
||||
hover.mode = 'mouse'
|
||||
|
||||
x1meanline = [rowdata[xparam].mean(),rowdata[xparam].mean()]
|
||||
y1meanline = [rowdata[yparam1].mean(),rowdata[yparam1].mean()]
|
||||
y2meanline = [rowdata[yparam2].mean(),rowdata[yparam2].mean()]
|
||||
|
||||
|
||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||
x1means=x1means,
|
||||
@@ -3370,6 +3394,8 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
var y2 = data['y2']
|
||||
var spm1 = data['spm']
|
||||
var time1 = data['time']
|
||||
var ftime1 = data['ftime']
|
||||
var index1 = data['index']
|
||||
var pace1 = data['pace']
|
||||
var hr1 = data['hr']
|
||||
var fpace1 = data['fpace']
|
||||
@@ -3379,6 +3405,9 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
var xname = data['xname'][0]
|
||||
var yname1 = data['yname1'][0]
|
||||
var yname2 = data['yname2'][0]
|
||||
var workoutid1 = data['workoutid'][0]
|
||||
var workoutstate1 = data['workoutstate'][0]
|
||||
|
||||
|
||||
var annotation = annotation.value
|
||||
var minspm = minspm.value
|
||||
@@ -3396,17 +3425,23 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
data2['y2'] = []
|
||||
data2['spm'] = []
|
||||
data2['time'] = []
|
||||
data2['ftime'] = []
|
||||
data2['pace'] = []
|
||||
data2['hr'] = []
|
||||
data2['fpace'] = []
|
||||
data2['index'] = []
|
||||
data2['distance'] = []
|
||||
data2['power'] = []
|
||||
data2['x1mean'] = []
|
||||
data2['y1mean'] = []
|
||||
data2['y2mean'] = []
|
||||
data2['xvals'] = []
|
||||
data2['y1vals'] = []
|
||||
data2['y2vals'] = []
|
||||
data2['driveenergy'] = []
|
||||
data2['workoutid'] = []
|
||||
data2['workoutstate'] = []
|
||||
data2['xname'] = []
|
||||
data2['yname1'] = []
|
||||
data2['yname2'] = []
|
||||
|
||||
|
||||
for (i=0; i<x1.length; i++) {
|
||||
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
|
||||
@@ -3417,11 +3452,20 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
data2['y2'].push(y2[i])
|
||||
data2['spm'].push(spm1[i])
|
||||
data2['time'].push(time1[i])
|
||||
data2['index'].push(index1[i])
|
||||
data2['ftime'].push(ftime1[i])
|
||||
data2['fpace'].push(fpace1[i])
|
||||
data2['driveenergy'].push(driveenergy1[i])
|
||||
data2['pace'].push(pace1[i])
|
||||
data2['hr'].push(hr1[i])
|
||||
data2['distance'].push(distance1[i])
|
||||
data2['power'].push(power1[i])
|
||||
data2['workoutid'].push(workoutid1)
|
||||
data2['workoutstate'].push(workoutstate1)
|
||||
data2['xname'].push(xname)
|
||||
data2['yname1'].push(yname1)
|
||||
data2['yname2'].push(yname2)
|
||||
|
||||
|
||||
xm += x1[i]
|
||||
ym1 += y1[i]
|
||||
@@ -3435,9 +3479,14 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
ym1 /= data2['x1'].length
|
||||
ym2 /= data2['x1'].length
|
||||
|
||||
data2['x1mean'] = [xm,xm]
|
||||
data2['y1mean'] = [ym1,ym1]
|
||||
data2['y2mean'] = [ym2,ym2]
|
||||
for (i=0; i<data2['x1'].length; i++) {
|
||||
data2['x1mean'].push(xm)
|
||||
data2['y1mean'].push(ym1)
|
||||
data2['y2mean'].push(ym2)
|
||||
}
|
||||
|
||||
|
||||
|
||||
x1means.location = xm
|
||||
y1means.location = ym1
|
||||
y2means.location = ym2
|
||||
@@ -3446,7 +3495,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
||||
xlabel.text = xname+': '+xm.toFixed(2)
|
||||
annolabel.text = annotation
|
||||
|
||||
source2.trigger('change');
|
||||
source2.change.emit();
|
||||
""")
|
||||
|
||||
annotation = TextInput(title="Type your plot notes here", value="",
|
||||
@@ -3653,7 +3702,7 @@ def thumbnail_flex_chart(rowdata,id=0,promember=0,
|
||||
else:
|
||||
rowdata['yname2'] = axlabels[yparam1]
|
||||
|
||||
|
||||
|
||||
# prepare data
|
||||
source = ColumnDataSource(
|
||||
rowdata
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
Reference in New Issue
Block a user