https://bl.ocks.org/saevarom/05ec04bd343079843987a2d39cafc8e0
-
-
Save saevarom/05ec04bd343079843987a2d39cafc8e0 to your computer and use it in GitHub Desktop.
Exercise calendar
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
license: gpl-3.0 | |
height: 435 | |
border: no |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Date | Description | Q | |
---|---|---|---|
2016-01-06 | Crossfit | 1 | |
2016-01-08 | Crossfit | 1 | |
2016-01-13 | Crossfit | 1 | |
2016-01-15 | Crossfit | 1 | |
2016-01-16 | Run 5km | 1 | |
2016-01-18 | Crossfit | 1 | |
2016-01-22 | Crossfit | 1 | |
2016-01-24 | Run 5km | 1 | |
2016-01-25 | Crossfit | 1 | |
2016-02-01 | Crossfit | 1 | |
2016-02-08 | Crossfit | 1 | |
2016-02-10 | Crossfit | 1 | |
2016-02-12 | Crossfit | 1 | |
2016-02-17 | Crossfit | 1 | |
2016-02-19 | Crossfit | 1 | |
2016-02-22 | Crossfit | 1 | |
2016-02-29 | Crossfit | 1 | |
2016-03-07 | Run 5km | 1 | |
2016-03-09 | Crossfit | 1 | |
2016-03-10 | Run 10km | 1 | |
2016-03-14 | Crossfit | 1 | |
2016-03-16 | Crossfit | 1 | |
2016-03-20 | Run 10km | 1 | |
2016-03-21 | Crossfit | 1 | |
2016-03-24 | Crossfit | 1 | |
2016-03-30 | Crossfit | 1 | |
2016-04-02 | Run 4km | 1 | |
2016-04-04 | Crossfit | 1 | |
2016-04-08 | Crossfit | 1 | |
2016-04-13 | Crossfit | 1 | |
2016-04-15 | Crossfit | 1 | |
2016-04-18 | Crossfit | 1 | |
2016-04-25 | Bike 18km | 1 | |
2016-04-27 | Crossfit | 1 | |
2016-05-06 | Crossfit | 1 | |
2016-05-14 | Crossfit | 1 | |
2016-05-15 | Run 11km | 1 | |
2016-05-18 | Crossfit | 1 | |
2016-05-20 | Crossfit | 1 | |
2016-05-26 | Run 10km | 1 | |
2016-05-30 | Crossfit | 1 | |
2016-06-01 | Crossfit, bike | 2 | |
2016-06-13 | Crossfit | 1 | |
2016-06-16 | Crossfit | 1 | |
2016-06-27 | Run 5km | 1 | |
2016-08-03 | Crossfit | 1 | |
2016-08-05 | Crossfit | 1 | |
2016-08-06 | Run 10km | 1 | |
2016-08-08 | Crossfit | 1 | |
2016-08-10 | Crossfit | 1 | |
2016-11-07 | Crossfit | 1 | |
2016-11-09 | Crossfit | 1 | |
2016-11-10 | Run 10km | 1 | |
2016-11-14 | Crossfit | 1 | |
2016-11-16 | Crossfit | 1 | |
2016-11-18 | Crossfit | 1 | |
2016-11-21 | Crossfit | 1 | |
2016-11-23 | Crossfit | 1 | |
2016-11-30 | Crossfit | 1 | |
2016-12-05 | Crossfit | 1 | |
2016-12-12 | Crossfit | 1 | |
2016-12-17 | Crossfit | 1 | |
2016-12-19 | Crossfit | 1 | |
2016-12-29 | Crossfit | 1 | |
2017-01-06 | Crossfit | 1 | |
2017-01-09 | Crossfit | 1 | |
2017-01-13 | Crossfit | 1 | |
2017-01-15 | Run | 1 | |
2017-01-16 | Crossfit | 1 | |
2017-01-20 | Crossfit | 1 | |
2017-01-23 | Crossfit | 1 | |
2017-01-25 | Crossfit | 1 | |
2017-01-30 | Crossfit | 1 | |
2017-02-01 | Crossfit | 1 | |
2017-02-03 | Crossfit | 1 | |
2017-02-06 | Crossfit | 1 | |
2017-02-08 | Crossfit | 1 | |
2017-02-13 | Crossfit | 1 | |
2017-02-15 | Crossfit | 1 | |
2017-02-17 | Crossfit | 1 | |
2017-02-22 | Crossfit | 1 | |
2017-02-24 | Crossfit | 1 | |
2017-02-27 | Crossfit | 1 | |
2017-03-01 | Crossfit | 1 | |
2017-03-03 | Crossfit | 1 | |
2017-03-06 | Crossfit | 1 | |
2017-03-08 | Crossfit | 1 | |
2017-03-13 | Crossfit | 1 | |
2017-03-15 | Crossfit | 1 | |
2017-03-17 | Crossfit | 1 | |
2017-03-22 | Crossfit | 1 | |
2017-03-24 | Crossfit | 1 | |
2017-03-27 | Crossfit | 1 | |
2017-03-31 | Crossfit | 1 | |
2017-04-03 | Crossfit | 1 | |
2017-04-05 | Crossfit | 1 | |
2017-04-07 | Crossfit | 1 | |
2017-04-10 | Crossfit | 1 | |
2017-04-19 | Crossfit | 1 | |
2017-04-21 | Crossfit | 1 | |
2017-04-26 | Crossfit | 1 | |
2017-05-05 | Bike | 1 | |
2017-05-06 | Bike | 1 | |
2017-05-15 | Crossfit | 1 | |
2017-05-19 | Crossfit | 1 | |
2017-05-22 | Crossfit | 1 | |
2017-05-24 | Crossfit | 1 | |
2017-05-25 | jump-n-rope | 1 | |
2017-05-28 | Run, bike | 2 | |
2017-05-29 | Crossfit | 1 | |
2017-05-31 | Crossfit | 1 | |
2017-06-07 | Crossfit | 1 | |
2017-06-09 | Bike | 1 | |
2017-06-12 | Crossfit | 1 | |
2017-06-14 | Crossfit | 1 | |
2017-06-16 | Crossfit | 1 | |
2017-06-19 | Bike & Crossfit | 2 | |
2017-06-23 | Run 10km, Bike | 2 | |
2017-07-10 | Crossfit | 1 | |
2017-07-17 | Run 6.26km | 1 | |
2017-07-20 | Run 4.89km | 1 | |
2017-07-27 | Run 3.67km | 1 | |
2017-08-11 | Bike & Crossfit | 2 | |
2017-08-14 | Crossfit | 1 | |
2017-08-16 | Crossfit | 1 | |
2017-08-19 | Run 10km | 1 | |
2017-08-21 | Crossfit | 1 | |
2017-08-26 | Run Tindar 12KM | 1 | |
2017-08-30 | Crossfit | 1 | |
2017-09-01 | Crossfit | 1 | |
2017-09-06 | Crossfit | 1 | |
2017-09-08 | Crossfit | 1 | |
2017-09-11 | Crossfit | 1 | |
2017-09-13 | Crossfit | 1 | |
2017-09-18 | Crossfit | 1 | |
2017-09-20 | Crossfit | 1 | |
2017-09-22 | Crossfit | 1 | |
2017-09-25 | Crossfit | 1 | |
2017-09-27 | Crossfit, Bike 10.3km | 2 | |
2017-09-29 | Crossfit | 1 | |
2017-10-02 | Crossfit | 1 | |
2017-10-04 | Crossfit | 1 | |
2017-10-06 | Crossfit | 1 | |
2017-10-11 | Crossfit | 1 | |
2017-10-13 | Crossfit | 1 | |
2017-10-16 | Crossfit | 1 | |
2017-10-19 | 5K run central park | 1 | |
2017-11-01 | Crossfit | 1 | |
2017-11-03 | Crossfit | 1 | |
2017-11-06 | Crossfit | 1 | |
2017-11-08 | Crossfit | 1 | |
2017-11-10 | Crossfit | 1 | |
2017-11-20 | Crossfit | 1 | |
2017-12-06 | Crossfit | 1 | |
2017-12-11 | Crossfit | 1 | |
2017-12-15 | Crossfit | 1 | |
2017-12-18 | Crossfit | 1 | |
2017-12-30 | Run 10km | 1 | |
2018-01-03 | Crossfit | 1 | |
2018-01-08 | Crossfit | 1 | |
2018-01-10 | Crossfit | 1 | |
2018-01-12 | Crossfit | 1 | |
2018-01-15 | Crossfit | 1 | |
2018-01-17 | Crossfit | 1 | |
2018-01-19 | Crossfit | 1 | |
2018-01-22 | Crossfit | 1 | |
2018-01-24 | Crossfit | 1 | |
2018-01-26 | Crossfit | 1 | |
2018-01-29 | Crossfit | 1 | |
2018-01-31 | Crossfit | 1 | |
2018-02-02 | Crossfit | 1 | |
2018-02-05 | Crossfit | 1 | |
2018-02-07 | Crossfit | 1 | |
2018-02-09 | Crossfit | 1 | |
2018-02-12 | Crossfit | 1 | |
2018-02-19 | Crossfit | 1 | |
2018-02-22 | Crossfit | 1 | |
2018-02-23 | Crossfit Open 18.1 | 1 | |
2018-02-26 | Crossfit Open 18.1 | 1 | |
2018-02-28 | Crossfit | 1 | |
2018-03-02 | Crossfit Open 18.2 | 1 | |
2018-03-05 | Run 5km | 1 | |
2018-03-12 | Crossfit | 1 | |
2018-03-14 | Crossfit | 1 | |
2018-03-16 | Crossfit | 1 | |
2018-03-20 | Crossfit | 1 | |
2018-03-22 | Crossfit | 1 | |
2018-03-28 | Crossfit | 1 | |
2018-04-04 | Crossfit | 1 | |
2018-04-06 | Crossfit | 1 | |
2018-04-09 | Crossfit | 1 | |
2018-04-11 | Crossfit | 1 | |
2018-04-13 | Crossfit | 1 | |
2018-04-16 | Crossfit | 1 | |
2018-04-17 | Bike 12.5km | 1 | |
2018-04-18 | Crossfit | 1 | |
2018-04-20 | Crossfit | 1 | |
2018-04-18 | Crossfit | 1 | |
2018-04-23 | Crossfit | 1 | |
2018-04-27 | Crossfit | 1 | |
2018-04-29 | 5km Run | 1 | |
2018-05-03 | Crossfit | 1 | |
2018-05-07 | Crossfit-11km cycling | 2 | |
2018-05-09 | Crossfit-Hiking | 2 | |
2018-05-11 | Crossfit | 1 | |
2018-05-14 | Crossfit | 1 | |
2018-05-16 | Crossfit | 1 | |
2018-05-18 | Crossfit | 1 | |
2018-05-23 | 11km Run | 1 | |
2018-05-26 | 5km Run | 1 | |
2018-05-28 | Crossfit | 1 | |
2018-05-30 | Crossfit | 1 | |
2018-06-01 | Crossfit | 1 | |
2018-06-02 | 8km Hike | 1 | |
2018-06-04 | Crossfit | 1 | |
2018-06-08 | Crossfit | 1 | |
2018-06-11 | Crossfit | 1 | |
2018-06-15 | Crossfit | 1 | |
2018-06-18 | Crossfit | 1 | |
2018-06-20 | Cycling 10km | 1 | |
2018-06-26 | Crossfit + Cycling 10km | 2 | |
2018-06-28 | Run 5.8k | 1 | |
2018-06-29 | Crossfit | 1 | |
2018-06-30 | Run 11k | 1 | |
2018-07-04 | Crossfit | 1 | |
2018-07-06 | Crossfit | 1 | |
2018-07-14 | Run 5k | 1 | |
2018-07-17 | Run 5k | 1 | |
2018-07-18 | Fjölskylduganga | 1 | |
2018-07-26 | Crossfit | 1 | |
2018-07-27 | Fjörður ganga | 1 | |
2018-07-28 | Fjörður ganga | 1 | |
2018-07-29 | Fjörður ganga | 1 | |
2018-07-30 | Fjörður ganga | 1 | |
2018-08-03 | Crossfit | 1 | |
2018-08-09 | Crossfit | 1 | |
2018-08-10 | Cycling 10km | 1 | |
2018-08-13 | Crossfit | 1 | |
2018-08-14 | Crossfit | 1 | |
2018-08-16 | Row 5km | 1 | |
2018-08-18 | Row 10km | 1 | |
2018-08-22 | Bryanston | 1 | |
2018-08-31 | Crossfit | 1 | |
2018-09-03 | Crossfit | 1 | |
2018-09-07 | Crossfit | 1 | |
2018-09-10 | Crossfit | 1 | |
2018-09-15 | Crossfit | 1 | |
2018-09-17 | Crossfit | 1 | |
2018-09-19 | Crossfit | 1 | |
2018-09-21 | Crossfit | 1 | |
2018-09-22 | 5km Row | 1 | |
2018-09-24 | Crossfit | 1 | |
2018-09-26 | Crossfit | 1 | |
2018-09-27 | 12km bike | 1 | |
2018-09-28 | Crossfit | 1 | |
2018-10-01 | Crossfit | 1 | |
2018-10-03 | Crossfit | 1 | |
2018-10-05 | Crossfit | 1 | |
2018-10-11 | Crossfit | 1 | |
2018-10-12 | Crossfit | 1 | |
2018-10-15 | Crossfit | 1 | |
2018-10-24 | Crossfit | 1 | |
2018-10-26 | Crossfit | 1 | |
2018-10-29 | Crossfit | 1 | |
2018-10-31 | Crossfit | 1 | |
2018-11-01 | 10km run | 1 | |
2018-11-05 | Crossfit | 1 | |
2018-11-10 | Crossfit | 1 | |
2018-11-12 | Crossfit | 1 | |
2018-11-13 | 5km row | 1 | |
2018-11-19 | Crossfit | 1 | |
2018-11-26 | Crossfit | 1 | |
2018-11-28 | Crossfit | 1 | |
2018-12-01 | Crossfit | 1 | |
2018-12-08 | Row 1.5km | 1 | |
2018-12-10 | Crossfit | 1 | |
2018-12-12 | Crossfit | 1 | |
2018-12-14 | Crossfit | 1 | |
2018-12-15 | Crossfit | 1 | |
2018-12-17 | Crossfit | 1 | |
2018-12-19 | Crossfit | 1 | |
2018-12-28 | Crossfit | 1 | |
2018-12-31 | Crossfit | 1 | |
2019-01-03 | Crossfit | 1 | |
2019-01-07 | Crossfit | 1 | |
2019-01-09 | Crossfit | 1 | |
2019-01-11 | Crossfit | 1 | |
2019-01-12 | Crossfit-heima | 1 | |
2019-01-14 | Crossfit | 1 | |
2019-01-16 | Crossfit | 1 | |
2019-01-18 | Crossfit | 1 | |
2019-01-19 | Crossfit-heima | 1 | |
2019-01-21 | Crossfit | 1 | |
2019-01-23 | Endurance | 1 | |
2019-01-25 | Row 30m | 1 | |
2019-01-26 | Endurance | 1 | |
2019-01-29 | Endurance | 1 | |
2019-01-31 | Endurance | 1 | |
2019-02-01 | Crossfit | 1 | |
2019-02-03 | Endurance | 1 | |
2019-02-04 | Endurance | 1 | |
2019-02-06 | Endurance | 1 | |
2019-02-08 | Crossfit | 1 | |
2019-02-10 | Endurance | 1 | |
2019-02-11 | Endurance | 1 | |
2019-02-14 | Endurance | 1 | |
2019-02-15 | Crossfit | 1 | |
2019-02-16 | Crossfit | 1 | |
2019-02-18 | Endurance | 1 | |
2019-02-20 | Endurance | 1 | |
2019-02-21 | Endurance | 1 | |
2019-02-22 | Crossfit | 1 | |
2019-02-26 | Endurance | 1 | |
2019-02-27 | Endurance | 1 | |
2019-02-28 | Endurance | 1 | |
2019-03-01 | Crossfit | 1 | |
2019-03-04 | Crossfit | 1 | |
2019-03-05 | Endurance | 1 | |
2019-03-06 | Endurance | 1 | |
2019-03-11 | Crossfit | 1 | |
2019-03-14 | Endurance | 1 | |
2019-03-16 | Crossfit | 1 | |
2019-03-18 | Crossfit | 1 | |
2019-03-20 | Endurance | 1 | |
2019-03-22 | Crossfit | 1 | |
2019-03-28 | Crossfit | 1 | |
2019-03-30 | Crossfit-heima | 1 | |
2019-04-01 | Crossfit | 1 | |
2019-04-03 | Crossfit | 1 | |
2019-04-11 | Crossfit | 1 | |
2019-04-12 | Crossfit | 1 | |
2019-04-17 | Crossfit | 1 | |
2019-04-18 | Crossfit | 1 | |
2019-04-19 | Crossfit | 1 | |
2019-04-25 | Row 10km | 1 | |
2019-04-26 | Crossfit | 1 | |
2019-04-29 | Crossfit | 1 | |
2019-05-01 | Bike 26km | 1 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<style> | |
.future { | |
fill: #eee; | |
} | |
</style> | |
</head> | |
<body> | |
<script src="https://d3js.org/d3.v4.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script> | |
<script> | |
var monthNames = ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"] | |
var weeksInMonth = function(month){ | |
var m = d3.timeMonth.floor(month) | |
return d3.timeWeeks(d3.timeWeek.floor(m), d3.timeMonth.offset(m,1)).length; | |
} | |
var width = 960, | |
height = 136, | |
cellSize = 17, | |
now = new Date(); | |
var formatPercent = d3.format(".1%"); | |
var color = d3.scaleQuantize() | |
.domain([1, 3]) | |
.range(["#e5f5e0", "#a1d99b", "#31a354"]); | |
var svg = d3.select("body") | |
.selectAll("svg") | |
.data(d3.range(2016, 2020)) | |
.enter().append("svg") | |
.attr("width", width) | |
.attr("height", height) | |
.append("g") | |
.attr("transform", "translate(" + ((width - cellSize * 53) / 2) + "," + (height - cellSize * 7 - 1) + ")"); | |
svg.append("text") | |
.attr("transform", "translate(-6," + cellSize * 3.5 + ")rotate(-90)") | |
.attr("font-family", "sans-serif") | |
.attr("font-size", 10) | |
.attr("text-anchor", "middle") | |
.text(function(d) { return d; }); | |
window.inActiveWeeks = {} | |
var rect = svg.append("g") | |
.attr("fill", "none") | |
.attr("stroke", "#ccc") | |
.selectAll("rect") | |
.data(function(d) { return d3.timeDays(new Date(d, 0, 1), new Date(d + 1, 0, 1)); }) | |
.enter().append("rect") | |
.attr("width", cellSize) | |
.attr("height", cellSize) | |
.attr("x", function(d) { return d3.timeWeek.count(d3.timeYear(d), d) * cellSize; }) | |
.attr("y", function(d) { return d.getDay() * cellSize; }) | |
.attr("class", function(d) { | |
var str = moment(d).format("YYYY-w"); | |
str += (d < now ? " past" : " future"); | |
return str | |
}) | |
.datum(d3.timeFormat("%Y-%m-%d")) | |
svg.append("g") | |
.attr("fill", "none") | |
.attr("stroke", "#000") | |
.selectAll("path") | |
.data(function(d) { return d3.timeMonths(new Date(d, 0, 1), new Date(d + 1, 0, 1)); }) | |
.enter().append("path") | |
.attr("d", pathMonth); | |
svg.append("g") | |
.selectAll("text") | |
.data(function(d) { return d3.timeMonths(new Date(d, 0, 1), new Date(d + 1, 0, 1)) }) | |
.enter().append("text") | |
.attr("x", function(d) { | |
column = moment(d).isoWeek() | |
if (d.getMonth() === 0 && column > 50) { | |
column -= 52 | |
} | |
return column*cellSize + 1.5*cellSize; | |
}) | |
.attr("y", "-6") | |
.attr("font-family", "sans-serif") | |
.attr("font-size", 10) | |
.attr("text-anchor", "middle") | |
.text(function(d) { return monthNames[d.getMonth()]; }) | |
var weekdaynames = ["S", "M", "Þ", "M", "F", "F", "L"] | |
svg.append("g") | |
.selectAll("text") | |
.data([0, 1, 2, 3, 4, 5, 6]) | |
.enter().append("text") | |
.attr("x", "910") | |
.attr("y", function(d) { return (d+0.75)*cellSize}) | |
.attr("font-family", "sans-serif") | |
.attr("font-size", 10) | |
.attr("text-anchor", "middle") | |
.text(function(d) { return weekdaynames[d] }) | |
d3.csv("data.csv", function(error, csv) { | |
if (error) throw error; | |
var data = d3.nest() | |
.key(function(d) { return d.Date; }) | |
.rollup(function(d) { return d[0].Q; }) | |
.object(csv); | |
var texts = d3.nest() | |
.key(function(d) { return d.Date; }) | |
.rollup(function(d) { return d[0].Description; }) | |
.object(csv); | |
window.weekData = d3.nest() | |
.key(function(d) { return ""+moment(d.Date).get('year')+"-"+moment(d.Date).week(); }) | |
.rollup(function(d) { return d[0].Q; }) | |
.object(csv); | |
rect.filter(function(d) { return true; }) | |
.attr("fill", function(d) { | |
if (data[d] !== undefined) { | |
return color(data[d]); | |
} else { | |
var str = moment(d).format("YYYY-w"); | |
if (window.weekData && window.weekData[str] === undefined) { | |
return "#FF9090" | |
} | |
} | |
}) | |
.append("title") | |
.text(function(d) { | |
if (data[d] !== undefined) { | |
return "" + d + ": " + texts[d] + " (" + data[d] +")"; | |
} | |
return "" | |
}); | |
}); | |
function pathMonth(t0) { | |
var t1 = new Date(t0.getFullYear(), t0.getMonth() + 1, 0), | |
d0 = t0.getDay(), w0 = d3.timeWeek.count(d3.timeYear(t0), t0), | |
d1 = t1.getDay(), w1 = d3.timeWeek.count(d3.timeYear(t1), t1); | |
return "M" + (w0 + 1) * cellSize + "," + d0 * cellSize | |
+ "H" + w0 * cellSize + "V" + 7 * cellSize | |
+ "H" + w1 * cellSize + "V" + (d1 + 1) * cellSize | |
+ "H" + (w1 + 1) * cellSize + "V" + 0 | |
+ "H" + (w0 + 1) * cellSize + "Z"; | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment