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
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()

View File

@@ -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 %}

View File

@@ -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,