Private
Public Access
1
0

v1 chart stack

This commit is contained in:
2024-03-22 13:12:54 +01:00
parent 06cfdbc7a9
commit 82ec4c9d7c
3 changed files with 52 additions and 27 deletions

View File

@@ -18,7 +18,8 @@ import rowers.metrics as metrics
import rowers.dataprep as dataprep import rowers.dataprep as dataprep
from rowers.dataprep import rdata from rowers.dataprep import rdata
import rowers.utils as utils import rowers.utils as utils
from jsmin import jsmin
from rowers.rower_rules import ispromember
from scipy.interpolate import griddata from scipy.interpolate import griddata
from scipy.signal import savgol_filter from scipy.signal import savgol_filter
@@ -3907,15 +3908,20 @@ def interactive_flexchart_stacked(id, r, xparam='time',
yparam4='spm', yparam4='spm',
mode='erg'): mode='erg'):
columns = [xparam, yparam1, yparam2, yparam3, yparam4, columns = [name for name, d in metrics.rowingmetrics]
'ftime', 'distance', 'fpace', columns_basic = [name for name, d in metrics.rowingmetrics if d['group'] == 'basic']
'power', 'hr', 'spm', 'driveenergy', columns = columns + ['spm', 'driveenergy', 'distance']
'time', 'pace', 'workoutstate'] columns_basic = columns_basic + ['spm', 'driveenergy', 'distance']
comment = None rowdata = pd.DataFrame()
row = Workout.objects.get(id=id)
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id], doclean=True,
workstrokesonly=False) if ispromember(r.user):
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id], doclean=True,
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 if r.usersmooth > 1: # pragma: no cover
for column in columns: for column in columns:
@@ -3929,9 +3935,17 @@ def interactive_flexchart_stacked(id, r, xparam='time',
pass pass
if len(rowdata) < 2: if len(rowdata) < 2:
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id], if ispromember(r.user):
doclean=False, rowdata = dataprep.getsmallrowdata_db(columns, ids=[id],
workstrokesonly=False) doclean=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: if rowdata.empty:
return "", "No valid data", '', '', comment return "", "No valid data", '', '', comment
@@ -3969,6 +3983,28 @@ def interactive_flexchart_stacked(id, r, xparam='time',
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
rowdata['y4'] = 0*rowdata.loc[:, 'time'] rowdata['y4'] = 0*rowdata.loc[:, 'time']
rowdata[yparam4] = rowdata['y4'] 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': if xparam == 'time':
xaxmax = tseconds.max() xaxmax = tseconds.max()

View File

@@ -8,16 +8,8 @@
{% localtime on %} {% localtime on %}
{% block main %} {% block main %}
{{ js_res | safe }} <script src="https://d3js.org/d3.v6.js"></script>
{{ css_res| safe }}
<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> <p>
{% if workout|previousworkout:rower.user %} {% if workout|previousworkout:rower.user %}
@@ -34,6 +26,7 @@
<h1>Chart Stack</h1> <h1>Chart Stack</h1>
<ul class="main-content"> <ul class="main-content">
<canvas hidden id="canvas"></canvas>
<li class="grid_4"> <li class="grid_4">
<div id="theplot"> <div id="theplot">
{{ the_div|safe }} {{ the_div|safe }}
@@ -57,6 +50,7 @@
</form> </form>
</li> </li>
</ul> </ul>
{{ the_script |safe }}
{% endblock %} {% endblock %}
{% endlocaltime %} {% endlocaltime %}

View File

@@ -4500,7 +4500,7 @@ def workout_flexchart_stacked_view(request, *args, **kwargs):
yparam4 = cd['yaxis4'] yparam4 = cd['yaxis4']
( (
script, div, js_resources, css_resources, comment script, div
) = interactive_flexchart_stacked( ) = interactive_flexchart_stacked(
encoder.decode_hex(id), r, xparam=xparam, encoder.decode_hex(id), r, xparam=xparam,
yparam1=yparam1, yparam1=yparam1,
@@ -4510,9 +4510,6 @@ def workout_flexchart_stacked_view(request, *args, **kwargs):
mode=workout.workouttype, mode=workout.workouttype,
) )
if comment is not None: # pragma: no cover
messages.error(request, comment)
initial = { initial = {
'xaxis': xparam, 'xaxis': xparam,
'yaxis1': yparam1, 'yaxis1': yparam1,
@@ -4549,8 +4546,6 @@ def workout_flexchart_stacked_view(request, *args, **kwargs):
'active': 'nav-workouts', 'active': 'nav-workouts',
'workout': workout, 'workout': workout,
'chartform': flexaxesform, 'chartform': flexaxesform,
'js_res': js_resources,
'css_res': css_resources,
'id': id, 'id': id,
'xparam': xparam, 'xparam': xparam,
'yparam1': yparam1, 'yparam1': yparam1,