v1 chart stack
This commit is contained in:
@@ -18,7 +18,8 @@ import rowers.metrics as metrics
|
||||
import rowers.dataprep as dataprep
|
||||
from rowers.dataprep import rdata
|
||||
import rowers.utils as utils
|
||||
from jsmin import jsmin
|
||||
|
||||
from rowers.rower_rules import ispromember
|
||||
|
||||
from scipy.interpolate import griddata
|
||||
from scipy.signal import savgol_filter
|
||||
@@ -3907,15 +3908,20 @@ def interactive_flexchart_stacked(id, r, xparam='time',
|
||||
yparam4='spm',
|
||||
mode='erg'):
|
||||
|
||||
columns = [xparam, yparam1, yparam2, yparam3, yparam4,
|
||||
'ftime', 'distance', 'fpace',
|
||||
'power', 'hr', 'spm', 'driveenergy',
|
||||
'time', 'pace', 'workoutstate']
|
||||
columns = [name for name, d in metrics.rowingmetrics]
|
||||
columns_basic = [name for name, d in metrics.rowingmetrics if d['group'] == 'basic']
|
||||
columns = columns + ['spm', 'driveenergy', 'distance']
|
||||
columns_basic = columns_basic + ['spm', 'driveenergy', 'distance']
|
||||
|
||||
comment = None
|
||||
rowdata = pd.DataFrame()
|
||||
row = Workout.objects.get(id=id)
|
||||
|
||||
if ispromember(r.user):
|
||||
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id], doclean=True,
|
||||
workstrokesonly=False)
|
||||
workstrokesonly=False, for_chart=True)
|
||||
else:
|
||||
rowdata = dataprep.getsmallrowdata_db(columns_basic, ids=[id], doclean=True,
|
||||
workstrokesonly=False, for_chart=True)
|
||||
|
||||
if r.usersmooth > 1: # pragma: no cover
|
||||
for column in columns:
|
||||
@@ -3929,9 +3935,17 @@ def interactive_flexchart_stacked(id, r, xparam='time',
|
||||
pass
|
||||
|
||||
if len(rowdata) < 2:
|
||||
if ispromember(r.user):
|
||||
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id],
|
||||
doclean=False,
|
||||
workstrokesonly=False)
|
||||
workstrokesonly=False,
|
||||
for_chart=True)
|
||||
else:
|
||||
rowdata = dataprep.getsmallrowdata_db(columns_basic, ids=[id],
|
||||
doclean=False,
|
||||
workstrokesonly=False,
|
||||
for_chart=True)
|
||||
|
||||
|
||||
if rowdata.empty:
|
||||
return "", "No valid data", '', '', comment
|
||||
@@ -3970,6 +3984,28 @@ def interactive_flexchart_stacked(id, r, xparam='time',
|
||||
rowdata['y4'] = 0*rowdata.loc[:, 'time']
|
||||
rowdata[yparam4] = rowdata['y4']
|
||||
|
||||
# replace nans
|
||||
rowdata.fillna(value=0, inplace=True)
|
||||
|
||||
data_dict = rowdata.to_dict("records")
|
||||
|
||||
metrics_list = [{'name': name, 'rowingmetrics':d } for name, d in metrics.rowingmetrics]
|
||||
|
||||
chart_data = {
|
||||
'title': row.name,
|
||||
'x': xparam,
|
||||
'y1': yparam1,
|
||||
'y2': yparam2,
|
||||
'y3': yparam3,
|
||||
'y4': yparam4,
|
||||
'data': data_dict,
|
||||
'metrics': metrics_list,
|
||||
}
|
||||
|
||||
script, div = get_chart("/stacked", chart_data)
|
||||
|
||||
return script, div
|
||||
|
||||
if xparam == 'time':
|
||||
xaxmax = tseconds.max()
|
||||
xaxmin = tseconds.min()
|
||||
|
||||
@@ -8,16 +8,8 @@
|
||||
{% localtime on %}
|
||||
{% block main %}
|
||||
|
||||
{{ js_res | safe }}
|
||||
{{ css_res| safe }}
|
||||
<script src="https://d3js.org/d3.v6.js"></script>
|
||||
|
||||
<script src="https://cdn.pydata.org/bokeh/release/bokeh-3.1.1.min.js"></script>
|
||||
<script src="https://cdn.pydata.org/bokeh/release/bokeh-widgets-3.1.1.min.js"></script>
|
||||
<script async="true" type="text/javascript">
|
||||
Bokeh.set_log_level("info");
|
||||
</script>
|
||||
|
||||
{{ the_script |safe }}
|
||||
|
||||
<p>
|
||||
{% if workout|previousworkout:rower.user %}
|
||||
@@ -34,6 +26,7 @@
|
||||
<h1>Chart Stack</h1>
|
||||
|
||||
<ul class="main-content">
|
||||
<canvas hidden id="canvas"></canvas>
|
||||
<li class="grid_4">
|
||||
<div id="theplot">
|
||||
{{ the_div|safe }}
|
||||
@@ -57,6 +50,7 @@
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
{{ the_script |safe }}
|
||||
|
||||
{% endblock %}
|
||||
{% endlocaltime %}
|
||||
|
||||
@@ -4500,7 +4500,7 @@ def workout_flexchart_stacked_view(request, *args, **kwargs):
|
||||
yparam4 = cd['yaxis4']
|
||||
|
||||
(
|
||||
script, div, js_resources, css_resources, comment
|
||||
script, div
|
||||
) = interactive_flexchart_stacked(
|
||||
encoder.decode_hex(id), r, xparam=xparam,
|
||||
yparam1=yparam1,
|
||||
@@ -4510,9 +4510,6 @@ def workout_flexchart_stacked_view(request, *args, **kwargs):
|
||||
mode=workout.workouttype,
|
||||
)
|
||||
|
||||
if comment is not None: # pragma: no cover
|
||||
messages.error(request, comment)
|
||||
|
||||
initial = {
|
||||
'xaxis': xparam,
|
||||
'yaxis1': yparam1,
|
||||
@@ -4549,8 +4546,6 @@ def workout_flexchart_stacked_view(request, *args, **kwargs):
|
||||
'active': 'nav-workouts',
|
||||
'workout': workout,
|
||||
'chartform': flexaxesform,
|
||||
'js_res': js_resources,
|
||||
'css_res': css_resources,
|
||||
'id': id,
|
||||
'xparam': xparam,
|
||||
'yparam1': yparam1,
|
||||
|
||||
Reference in New Issue
Block a user