Public
Edited
Mar 21, 2023
Insert cell
Insert cell
avp = Plot.plot({
color: { legend: true },
marks: [
Plot.ruleY([0]),
Plot.lineY(week_distances_2, { x: "week", y: "distance", stroke: "kind" })
]
})
Insert cell
week_distances_2 = {
const p = [...week_distances].map((d) => {
return { week: d.Week, kind: "planned", distance: d.Planned };
});
const a = [...week_distances].map((d) => {
return { week: d.Week, kind: "actual", distance: d.Actual };
});
return [...a, ...p];
}
Insert cell
week_distances
Insert cell
Plot.plot({
marks: [
Plot.ruleY([0]),
Plot.lineY(week_distances, { x: "Week", y: "Planned", stroke: "blue" }),
Plot.lineY(week_distances, { x: "Week", y: "Actual", stroke: "red" })
]
})
Insert cell
week_distances.csv
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
pace = Plot.plot({
marks: [
Plot.linearRegressionY(data, { x: "date", y: "pace" }),
Plot.dot(data, {
x: "date",
y: "pace"
})
]
})
Insert cell
Plot.plot({
marks: [Plot.ruleY([4]), Plot.lineY(data, { x: "date", y: "pace" })]
})
Insert cell
viewof table = Inputs.table(data)
Insert cell
function getWeek(date) {
const oneJan = new Date(date.getFullYear(), 0, 1);
const millisecsInDay = 86400000;
const dayOfYear = (date - oneJan) / millisecsInDay;
return Math.ceil((dayOfYear + oneJan.getDay() + 1) / 7);
}
Insert cell
data = [
{
date: "Mon, 20 Mar 2023 13:00:00 GMT",
title: "Evening Run",
dur_s: 1650,
dist: 5.02,
pace: 5.478087649402391
},
{
date: "Sat, 18 Mar 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 3281,
dist: 8.08,
pace: 6.7677392739273925
},
{
date: "Fri, 17 Mar 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 4052,
dist: 10.31,
pace: 6.550274814096346
},
{
date: "Mon, 13 Mar 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 1692,
dist: 5,
pace: 5.64
},
{
date: "Sat, 11 Mar 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 2121,
dist: 5.64,
pace: 6.267730496453901
},
{
date: "Thu, 09 Mar 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1382,
dist: 4.01,
pace: 5.74397339983375
},
{
date: "Wed, 08 Mar 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 3219,
dist: 8.58,
pace: 6.252913752913753
},
{
date: "Sat, 04 Mar 2023 13:00:00 GMT",
title: "Evening Run",
dur_s: 1538,
dist: 5.01,
pace: 5.116433799068529
},
{
date: "Wed, 01 Mar 2023 13:00:00 GMT",
title: "Afternoon Run",
dur_s: 3487,
dist: 8.9,
pace: 6.5299625468164795
},
{
date: "Tue, 28 Feb 2023 13:00:00 GMT",
title: "Hot hot hot hot hot",
dur_s: 1793,
dist: 5.04,
pace: 5.929232804232804
},
{
date: "Fri, 24 Feb 2023 13:00:00 GMT",
title: "Morning Trail Run",
dur_s: 3933,
dist: 8.37,
pace: 7.831541218637994
},
{
date: "Wed, 22 Feb 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1372,
dist: 4.01,
pace: 5.702410640066501
},
{
date: "Tue, 21 Feb 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 1781,
dist: 5.01,
pace: 5.924817032601464
},
{
date: "Mon, 20 Feb 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1430,
dist: 4.1,
pace: 5.813008130081301
},
{
date: "Fri, 17 Feb 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 5353,
dist: 10.83,
pace: 8.237919359803016
},
{
date: "Wed, 15 Feb 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1408,
dist: 4.01,
pace: 5.852036575228595
},
{
date: "Tue, 14 Feb 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1907,
dist: 5.2,
pace: 6.112179487179487
},
{
date: "Mon, 13 Feb 2023 13:00:00 GMT",
title: "New shoosday",
dur_s: 1500,
dist: 4.01,
pace: 6.234413965087282
},
{
date: "Thu, 09 Feb 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 3557,
dist: 9.17,
pace: 6.464921846601236
},
{
date: "Wed, 08 Feb 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 1161,
dist: 3.21,
pace: 6.028037383177571
},
{
date: "Tue, 07 Feb 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 3812,
dist: 8.83,
pace: 7.1951679879199695
},
{
date: "Mon, 06 Feb 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 1164,
dist: 3.19,
pace: 6.081504702194357
},
{
date: "Sat, 04 Feb 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 1927,
dist: 5.07,
pace: 6.33464825772518
},
{
date: "Fri, 03 Feb 2023 13:00:00 GMT",
title: "Afternoon Run",
dur_s: 2820,
dist: 6.87,
pace: 6.841339155749636
},
{
date: "Tue, 31 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 932,
dist: 2.28,
pace: 6.812865497076024
},
{
date: "Tue, 31 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 2177,
dist: 5.24,
pace: 6.924300254452926
},
{
date: "Mon, 30 Jan 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 1184,
dist: 3.23,
pace: 6.109391124871001
},
{
date: "Sat, 28 Jan 2023 13:00:00 GMT",
title: "Manly Dam 10k",
dur_s: 4509,
dist: 9.23,
pace: 8.14192849404117
},
{
date: "Thu, 26 Jan 2023 13:00:00 GMT",
title: "Evening Run",
dur_s: 1269,
dist: 3.28,
pace: 6.448170731707317
},
{
date: "Tue, 24 Jan 2023 13:00:00 GMT",
title: "Evening Run",
dur_s: 3609,
dist: 8.42,
pace: 7.143705463182898
},
{
date: "Fri, 20 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 5677,
dist: 10.24,
pace: 9.239908854166666
},
{
date: "Wed, 18 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1290,
dist: 3.23,
pace: 6.656346749226007
},
{
date: "Tue, 17 Jan 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 2064,
dist: 5.13,
pace: 6.705653021442495
},
{
date: "Mon, 16 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 1030,
dist: 2.83,
pace: 6.065959952885748
},
{
date: "Fri, 13 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 7373,
dist: 18.23,
pace: 6.740720424209179
},
{
date: "Wed, 11 Jan 2023 13:00:00 GMT",
title: "Lunch Run",
dur_s: 868,
dist: 2.44,
pace: 5.92896174863388
},
{
date: "Sat, 07 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 6903,
dist: 13.73,
pace: 8.379461034231609
},
{
date: "Wed, 04 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 2103,
dist: 4.97,
pace: 7.0523138832997985
},
{
date: "Mon, 02 Jan 2023 13:00:00 GMT",
title: "Morning Run",
dur_s: 929,
dist: 2.53,
pace: 6.119894598155468
},
{
date: "Sun, 01 Jan 2023 13:00:00 GMT",
title: "Lunch Trail Run",
dur_s: 3522,
dist: 8.48,
pace: 6.922169811320755
},
{
date: "Wed, 28 Dec 2022 13:00:00 GMT",
title: "Morning Run",
dur_s: 2581,
dist: 5.48,
pace: 7.849756690997566
},
{
date: "Tue, 27 Dec 2022 13:00:00 GMT",
title: "Morning Run",
dur_s: 2105,
dist: 5.21,
pace: 6.733845169545746
},
{
date: "Thu, 22 Dec 2022 13:00:00 GMT",
title: "Bush bashing w/ Fi and Em",
dur_s: 2894,
dist: 6.07,
pace: 7.946183415705656
},
{
date: "Wed, 21 Dec 2022 13:00:00 GMT",
title: "Lunch Run",
dur_s: 2827,
dist: 7,
pace: 6.730952380952381
},
{
date: "Tue, 13 Dec 2022 13:00:00 GMT",
title: "Morning Run",
dur_s: 3350,
dist: 8.01,
pace: 6.970453599667083
},
{
date: "Tue, 06 Dec 2022 13:00:00 GMT",
title: "Lunch Run",
dur_s: 2567,
dist: 6.04,
pace: 7.083333333333333
}
].map((d) => ({
...d,
date: new Date(d.date),
week: getWeek(new Date(d.date))
}))
Insert cell

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more