Private
Public Access
1
0

box chart and activity chart improvements (holoview)

This commit is contained in:
Sander Roosendaal
2019-03-02 15:10:25 +01:00
parent 5e236ed138
commit 6fca69c3be
4 changed files with 47 additions and 54 deletions

View File

@@ -169,16 +169,31 @@ def interactive_boxchart(datadf,fieldname,extratitle=''):
if datadf.empty: if datadf.empty:
return '','It looks like there are no data matching your filter' return '','It looks like there are no data matching your filter'
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,hover' tooltips = [
('Value', '@'+fieldname),
]
hover = HoverTool(tooltips=tooltips)
plot = BoxPlot(datadf, values=fieldname, label='date', TOOLS = [hover]
legend=False,
title=axlabels[fieldname]+' '+extratitle,
outliers=False, hv.extension('bokeh')
tools=TOOLS,
toolbar_location="above", boxwhiskers = hv.BoxWhisker(datadf,'date',fieldname)
toolbar_sticky=False, boxwhiskers.opts(tools=TOOLS)
x_mapper_type='datetime',plot_width=920)
plot = hv.render(boxwhiskers)
#plot = BoxPlot(datadf, values=fieldname, label='date',
# legend=False,
# title=axlabels[fieldname]+' '+extratitle,
# outliers=False,
# tools=TOOLS,
# toolbar_location="above",
# toolbar_sticky=False,
# x_mapper_type='datetime',plot_width=920)
yrange1 = Range1d(start=yaxminima[fieldname],end=yaxmaxima[fieldname]) yrange1 = Range1d(start=yaxminima[fieldname],end=yaxmaxima[fieldname])
plot.y_range = yrange1 plot.y_range = yrange1
@@ -188,33 +203,6 @@ def interactive_boxchart(datadf,fieldname,extratitle=''):
plot.yaxis.axis_label = axlabels[fieldname] plot.yaxis.axis_label = axlabels[fieldname]
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url = [watermarkurl],))
watermarkrange = Range1d(start=0,end=1)
watermarkalpha = 0.6
watermarkx = 0.99
watermarky = 0.01
watermarkw = 184
watermarkh = 35
watermarkanchor = 'bottom_right'
plot.extra_y_ranges = {"watermark": watermarkrange}
plot.extra_x_ranges = {"watermark": watermarkrange}
plot.image_url([watermarkurl],watermarkx,watermarky,
watermarkw,watermarkh,
global_alpha=watermarkalpha,
w_units='screen',
h_units='screen',
anchor=watermarkanchor,
dilate=True,
x_range_name = "watermark",
y_range_name = "watermark",
)
plot.xaxis.formatter = DatetimeTickFormatter( plot.xaxis.formatter = DatetimeTickFormatter(
days=["%d %B %Y"], days=["%d %B %Y"],
months=["%d %B %Y"], months=["%d %B %Y"],
@@ -230,15 +218,9 @@ def interactive_boxchart(datadf,fieldname,extratitle=''):
plot.xaxis.major_label_orientation = pi/4 plot.xaxis.major_label_orientation = pi/4
hover = plot.select(dict(type=HoverTool)) plot.plot_width=920
plot.plot_height=600
hover.tooltips = OrderedDict([
('Value','@y'),
('Date','@x'),
])
hover.mode = 'mouse'
script, div = components(plot) script, div = components(plot)
return script,div return script,div
@@ -255,6 +237,7 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
seen = ['seen'] seen = ['seen']
idseen = [] idseen = []
for w in workouts: for w in workouts:
aantal=1 aantal=1
initials = w.user.user.first_name[0:aantal]+w.user.user.last_name[0:aantal] initials = w.user.user.first_name[0:aantal]+w.user.user.last_name[0:aantal]
@@ -302,7 +285,10 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
dates_sorting.append(d.strftime('%Y/%m/%d')) dates_sorting.append(d.strftime('%Y/%m/%d'))
durations.append(0) durations.append(0)
types.append('rower') types.append('rower')
rowers.append('Sander') try:
rowers.append(rowersinitials[workouts[0].user.id])
except IndexError:
rowers.append(str(workouts[0].user))
d += datetime.timedelta(days=1) d += datetime.timedelta(days=1)
@@ -318,12 +304,16 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
hv.extension('bokeh') hv.extension('bokeh')
table = hv.Table(df,[('date','Date'),('type','Workout Type')],[('duration','Minutes')]) if stack == 'type':
table = hv.Table(df,[('date','Date'),('type','Workout Type')],[('duration','Minutes')])
else:
table = hv.Table(df,[('date','Date'),('rower','Rower')],[('duration','Minutes')])
bars=table.to.bars(['date','type'],['duration']) bars=table.to.bars(['date',stack],['duration'])
bars.opts( bars.opts(
opts.Bars(color=hv.Cycle('Category20'), show_legend=True, stacked=True, opts.Bars(color=hv.Cycle('Category20'), show_legend=True, stacked=True,
tools=['hover'], width=600, xrotation=90)) tools=['hover'], width=600, xrotation=90,))
# legend_position='bottom',show_frame=True))
p = hv.render(bars) p = hv.render(bars)
@@ -332,8 +322,8 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
d1 = startdate.strftime("%Y-%m-%d"), d1 = startdate.strftime("%Y-%m-%d"),
d2 = enddate.strftime("%Y-%m-%d"), d2 = enddate.strftime("%Y-%m-%d"),
) )
p.plot_width=350 p.plot_width=550
p.plot_height=250 p.plot_height=350
p.toolbar_location = None p.toolbar_location = None

Binary file not shown.

View File

@@ -1253,7 +1253,6 @@ def workouts_view(request,message='',successmessage='',
elif request.user != r.user: elif request.user != r.user:
theteam = None theteam = None
workouts = Workout.objects.filter( workouts = Workout.objects.filter(
user=r, user=r,
@@ -1266,7 +1265,8 @@ def workouts_view(request,message='',successmessage='',
startdatetime__lte=activity_enddate, startdatetime__lte=activity_enddate,
duplicate=False, duplicate=False,
privacy='visible').order_by("-startdatetime") privacy='visible').order_by("-startdatetime")
else: else:
print('noot')
theteam = None theteam = None
workouts = Workout.objects.filter( workouts = Workout.objects.filter(
user=r, user=r,
@@ -1285,6 +1285,7 @@ def workouts_view(request,message='',successmessage='',
startdatetime__gte=timezone.now()-timedelta(days=15)).order_by("-startdatetime") startdatetime__gte=timezone.now()-timedelta(days=15)).order_by("-startdatetime")
g_enddate = timezone.now() g_enddate = timezone.now()
g_startdate = (timezone.now()-timedelta(days=15)) g_startdate = (timezone.now()-timedelta(days=15))
if rankingonly: if rankingonly:
workouts = workouts.exclude(rankingpiece=False) workouts = workouts.exclude(rankingpiece=False)

View File

@@ -22,6 +22,8 @@ from rowsandall_app.views import rootview
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from rowers import views as rowersviews from rowers import views as rowersviews
import django
from django.conf.urls import ( from django.conf.urls import (
handler400, handler403, handler404, handler500 handler400, handler403, handler404, handler500
) )
@@ -87,7 +89,7 @@ urlpatterns += [
url(r'^twitter\_callback',rowersviews.rower_process_twittercallback), url(r'^twitter\_callback',rowersviews.rower_process_twittercallback),
url(r'^i18n/', include('django.conf.urls.i18n')), url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^tz_detect/', include('tz_detect.urls')), url(r'^tz_detect/', include('tz_detect.urls')),
url(r'^jsi18n/', 'django.views.i18n.javascript_catalog',name='jsi18n'), url(r'^jsi18n/', django.views.i18n.javascript_catalog,name='jsi18n'),
] ]