box chart and activity chart improvements (holoview)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
@@ -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)
|
||||||
|
|||||||
@@ -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'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user