Annotations
This commit is contained in:
@@ -19,7 +19,7 @@ from bokeh.models import (
|
|||||||
GMapPlot, GMapOptions, ColumnDataSource, Circle,
|
GMapPlot, GMapOptions, ColumnDataSource, Circle,
|
||||||
DataRange1d, PanTool, WheelZoomTool, BoxSelectTool,
|
DataRange1d, PanTool, WheelZoomTool, BoxSelectTool,
|
||||||
SaveTool, ResizeTool, ResetTool, TapTool,CrosshairTool,BoxZoomTool,
|
SaveTool, ResizeTool, ResetTool, TapTool,CrosshairTool,BoxZoomTool,
|
||||||
Span,
|
Span, Label
|
||||||
)
|
)
|
||||||
#from bokeh.models.widgets import Slider, Select, TextInput
|
#from bokeh.models.widgets import Slider, Select, TextInput
|
||||||
from bokeh.core.properties import value
|
from bokeh.core.properties import value
|
||||||
@@ -696,6 +696,12 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
|
|||||||
y_axis_type = 'datetime'
|
y_axis_type = 'datetime'
|
||||||
y1mean = datadf.ix[:,'pseconds'].mean()
|
y1mean = datadf.ix[:,'pseconds'].mean()
|
||||||
|
|
||||||
|
datadf['xname'] = xparam
|
||||||
|
datadf['yname1'] = yparam1
|
||||||
|
if yparam2 != 'None':
|
||||||
|
datadf['yname2'] = yparam2
|
||||||
|
else:
|
||||||
|
datadf['yname2'] = yparam1
|
||||||
|
|
||||||
source = ColumnDataSource(
|
source = ColumnDataSource(
|
||||||
datadf
|
datadf
|
||||||
@@ -723,12 +729,27 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
|
|||||||
line_dash=[6,6],line_width=2)
|
line_dash=[6,6],line_width=2)
|
||||||
y2means = y1means
|
y2means = y1means
|
||||||
|
|
||||||
|
xlabel = Label(x=370,y=130,x_units='screen',y_units='screen',
|
||||||
|
text=xparam+": {x1mean:6.2f}".format(x1mean=x1mean),
|
||||||
|
background_fill_alpha=.7,
|
||||||
|
text_color='green',
|
||||||
|
)
|
||||||
|
|
||||||
if (xparam != 'time') and (xparam != 'distance'):
|
if (xparam != 'time') and (xparam != 'distance'):
|
||||||
plot.add_layout(x1means)
|
plot.add_layout(x1means)
|
||||||
|
plot.add_layout(xlabel)
|
||||||
|
|
||||||
plot.add_layout(y1means)
|
plot.add_layout(y1means)
|
||||||
|
|
||||||
|
y1label = Label(x=370,y=100,x_units='screen',y_units='screen',
|
||||||
|
text=yparam1+": {y1mean:6.2f}".format(y1mean=y1mean),
|
||||||
|
background_fill_alpha=.7,
|
||||||
|
text_color='blue',
|
||||||
|
)
|
||||||
|
if yparam1 != 'time' and yparam1 != 'pace':
|
||||||
|
plot.add_layout(y1label)
|
||||||
|
|
||||||
|
y2label = y1label
|
||||||
plot.circle('x1','y1',source=source2,fill_alpha=0.3,line_color=None,
|
plot.circle('x1','y1',source=source2,fill_alpha=0.3,line_color=None,
|
||||||
legend=yparamname1,
|
legend=yparamname1,
|
||||||
)
|
)
|
||||||
@@ -780,6 +801,13 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
|
|||||||
|
|
||||||
|
|
||||||
plot.add_layout(y2means)
|
plot.add_layout(y2means)
|
||||||
|
y2label = Label(x=370,y=70,x_units='screen',y_units='screen',
|
||||||
|
text=yparam2+": {y2mean:6.2f}".format(y2mean=y2mean),
|
||||||
|
background_fill_alpha=.7,
|
||||||
|
text_color='red',
|
||||||
|
)
|
||||||
|
if yparam2 != 'pace' and yparam2 != 'time':
|
||||||
|
plot.add_layout(y2label)
|
||||||
|
|
||||||
hover = plot.select(dict(type=HoverTool))
|
hover = plot.select(dict(type=HoverTool))
|
||||||
|
|
||||||
@@ -797,6 +825,9 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
|
|||||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||||
x1means=x1means,
|
x1means=x1means,
|
||||||
y1means=y1means,
|
y1means=y1means,
|
||||||
|
y1label=y1label,
|
||||||
|
y2label=y2label,
|
||||||
|
xlabel=xlabel,
|
||||||
y2means=y2means), code="""
|
y2means=y2means), code="""
|
||||||
var data = source.data
|
var data = source.data
|
||||||
var data2 = source2.data
|
var data2 = source2.data
|
||||||
@@ -809,6 +840,9 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
|
|||||||
var hr1 = data['hr']
|
var hr1 = data['hr']
|
||||||
var distance1 = data['distance']
|
var distance1 = data['distance']
|
||||||
var power1 = data['power']
|
var power1 = data['power']
|
||||||
|
var xname = data['xname'][0]
|
||||||
|
var yname1 = data['yname1'][0]
|
||||||
|
var yname2 = data['yname2'][0]
|
||||||
|
|
||||||
var minspm = minspm.value
|
var minspm = minspm.value
|
||||||
var maxspm = maxspm.value
|
var maxspm = maxspm.value
|
||||||
@@ -865,6 +899,9 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
|
|||||||
x1means.location = xm
|
x1means.location = xm
|
||||||
y1means.location = ym1
|
y1means.location = ym1
|
||||||
y2means.location = ym2
|
y2means.location = ym2
|
||||||
|
y1label.text = yname1+': '+ym1.toFixed(2)
|
||||||
|
y2label.text = yname2+': '+ym2.toFixed(2)
|
||||||
|
xlabel.text = xname+': '+xm.toFixed(2)
|
||||||
|
|
||||||
source2.trigger('change');
|
source2.trigger('change');
|
||||||
""")
|
""")
|
||||||
@@ -1026,7 +1063,14 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
y_axis_type = 'datetime'
|
y_axis_type = 'datetime'
|
||||||
y1mean = rowdata.ix[:,'pseconds'].mean()
|
y1mean = rowdata.ix[:,'pseconds'].mean()
|
||||||
|
|
||||||
|
|
||||||
|
rowdata['xname'] = xparam
|
||||||
|
rowdata['yname1'] = yparam1
|
||||||
|
if yparam2 != 'None':
|
||||||
|
rowdata['yname2'] = yparam2
|
||||||
|
else:
|
||||||
|
rowdata['yname2'] = yparam1
|
||||||
|
|
||||||
# prepare data
|
# prepare data
|
||||||
source = ColumnDataSource(
|
source = ColumnDataSource(
|
||||||
rowdata
|
rowdata
|
||||||
@@ -1059,12 +1103,27 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
line_dash=[6,6],line_width=2)
|
line_dash=[6,6],line_width=2)
|
||||||
y2means = y1means
|
y2means = y1means
|
||||||
|
|
||||||
|
xlabel = Label(x=370,y=130,x_units='screen',y_units='screen',
|
||||||
|
text=xparam+": {x1mean:6.2f}".format(x1mean=x1mean),
|
||||||
|
background_fill_alpha=.7,
|
||||||
|
text_color='green',
|
||||||
|
)
|
||||||
|
|
||||||
if (xparam != 'time') and (xparam != 'distance'):
|
if (xparam != 'time') and (xparam != 'distance'):
|
||||||
plot.add_layout(x1means)
|
plot.add_layout(x1means)
|
||||||
|
plot.add_layout(xlabel)
|
||||||
|
|
||||||
|
|
||||||
plot.add_layout(y1means)
|
plot.add_layout(y1means)
|
||||||
|
|
||||||
|
y1label = Label(x=370,y=100,x_units='screen',y_units='screen',
|
||||||
|
text=yparam1+": {y1mean:6.2f}".format(y1mean=y1mean),
|
||||||
|
background_fill_alpha=.7,
|
||||||
|
text_color='blue',
|
||||||
|
)
|
||||||
|
if yparam1 != 'time' and yparam1 != 'pace':
|
||||||
|
plot.add_layout(y1label)
|
||||||
|
y2label = y1label
|
||||||
|
|
||||||
# average values
|
# average values
|
||||||
if yparam1 == 'driveenergy':
|
if yparam1 == 'driveenergy':
|
||||||
@@ -1132,6 +1191,13 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
|
|
||||||
|
|
||||||
plot.add_layout(y2means)
|
plot.add_layout(y2means)
|
||||||
|
y2label = Label(x=370,y=70,x_units='screen',y_units='screen',
|
||||||
|
text=yparam2+": {y2mean:6.2f}".format(y2mean=y2mean),
|
||||||
|
background_fill_alpha=.7,
|
||||||
|
text_color='red',
|
||||||
|
)
|
||||||
|
if yparam2 != 'pace' and yparam2 != 'time':
|
||||||
|
plot.add_layout(y2label)
|
||||||
|
|
||||||
hover = plot.select(dict(type=HoverTool))
|
hover = plot.select(dict(type=HoverTool))
|
||||||
|
|
||||||
@@ -1150,6 +1216,9 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||||
x1means=x1means,
|
x1means=x1means,
|
||||||
y1means=y1means,
|
y1means=y1means,
|
||||||
|
y1label=y1label,
|
||||||
|
y2label=y2label,
|
||||||
|
xlabel=xlabel,
|
||||||
y2means=y2means), code="""
|
y2means=y2means), code="""
|
||||||
var data = source.data
|
var data = source.data
|
||||||
var data2 = source2.data
|
var data2 = source2.data
|
||||||
@@ -1162,6 +1231,9 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
var hr1 = data['hr']
|
var hr1 = data['hr']
|
||||||
var distance1 = data['distance']
|
var distance1 = data['distance']
|
||||||
var power1 = data['power']
|
var power1 = data['power']
|
||||||
|
var xname = data['xname'][0]
|
||||||
|
var yname1 = data['yname1'][0]
|
||||||
|
var yname2 = data['yname2'][0]
|
||||||
|
|
||||||
var minspm = minspm.value
|
var minspm = minspm.value
|
||||||
var maxspm = maxspm.value
|
var maxspm = maxspm.value
|
||||||
@@ -1218,6 +1290,9 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
x1means.location = xm
|
x1means.location = xm
|
||||||
y1means.location = ym1
|
y1means.location = ym1
|
||||||
y2means.location = ym2
|
y2means.location = ym2
|
||||||
|
y1label.text = yname1+': '+ym1.toFixed(2)
|
||||||
|
y2label.text = yname2+': '+ym2.toFixed(2)
|
||||||
|
xlabel.text = xname+': '+xm.toFixed(2)
|
||||||
|
|
||||||
source2.trigger('change');
|
source2.trigger('change');
|
||||||
""")
|
""")
|
||||||
|
|||||||
Reference in New Issue
Block a user